링크 ux 서버 생 성 ws 서비스 https + ws 설정 안내


뉴스 서비스 만 들 기
물음:
Workerman 은 어떻게 뉴스 서 비 스 를 만 들 고 클 라 이언 트 가 뉴스 협 회 를 통 해 통신 을 연결 할 수 있 습 니까? 예 를 들 어 위 챗 애플 릿 에서 서버 를 연결 할 수 있 습 니 다.
답:
ws 프로 토 콜 은 실제 웹 소켓 + SSL 로 웹 소켓 프로 토 콜 에 SSL 층 을 추가 하 는 것 으로 https (http + SSL) 와 유사 합 니 다.따라서 웹 소켓 프로 토 콜 을 바탕 으로 SSL 을 켜 면 뉴스 프로 토 콜 을 지원 할 수 있다.
방법 1, Workerman 으로 SSL 직접 열기
준비 작업:
1. Workerman 버 전 은 3.3.7 이상 이 어야 합 니 다.
2, PHP 설치 openssl 확장
3. 인증서 (pem / crt 파일 및 key 파일) 를 디스크 임 의 디 렉 터 리 에 두 었 습 니 다.
코드:
 array(
        //        
        'local_cert'                 => '    /server.pem', //     crt  
        'local_pk'                   => '    /server.key',
        'verify_peer'                => false,
        // 'allow_self_signed' => true, //               
    )
);
//       websocket  (    ,              )
$worker = new Worker('websocket://0.0.0.0:443', $context);
//   transport  ssl,websocket+ssl wss
$worker->transport = 'ssl';
$worker->onMessage = function($con, $msg) {
    $con->send('ok');
};

Worker::runAll();

이상 의 코드 를 통 해 Workerman 은 뉴스 프로 토 콜 을 감청 하고 클 라 이언 트 는 뉴스 프로 토 콜 을 통 해 workerman 을 연결 하여 안전 한 실시 간 통신 을 실현 할 수 있 습 니 다.
테스트
chrome 브 라 우 저 를 열 고 F12 를 누 르 면 디 버 깅 콘 솔 을 열 고 Console 란 에 입력 하거나 아래 코드 를 html 페이지 에 넣 고 js 로 실행 합 니 다)
//          ,       
ws = new WebSocket("wss://  ");
ws.onopen = function() {
    alert("    ");
    ws.send('tom');
    alert("           :tom");
};
ws.onmessage = function(e) {
    alert("        :" + e.data);
};

주의:
1. 시작 할 수 없 으 면 보통 443 포트 가 점용 되 므 로 다른 포트 로 바 꾸 십시오. 다른 포트 로 바 꾼 후에 클 라 이언 트 가 연결 할 때 포트 번 호 를 가 져 가 야 합 니 다. 클 라 이언 트 가 연결 할 때 주소 가 유사 합 니 다.wss://domain.com:xxx , xxx 는 포트 번호 입 니 다.443 포트 를 사용 해 야 한다 면 방법 2 대리 방식 으로 뉴스 를 실현 하 십시오.
2. ws 포트 는 ws 프로 토 콜 을 통 해 만 접근 할 수 있 고 ws 는 ws 포트 에 접근 할 수 없습니다.
3. 인증 서 는 일반적으로 도 메 인 이름과 연결 되 어 있 기 때문에 테스트 할 때 클 라 이언 트 는 도 메 인 이름 으로 연결 하고 ip 로 연결 하지 마 십시오.
4. 접근 할 수 없 는 상황 이 발생 하면 서버 방화벽 을 확인 하 십시오.
5. 이 방법 은 PHP 버 전 > = 5.6 을 요구 합 니 다. 위 챗 애플 릿 은 tles 1.2 를 요구 하고 PHP 5.6 이하 버 전 은 tles 1.2 를 지원 하지 않 기 때 문 입 니 다.
방법 2. nginx / apache 대리 ws 이용
Workerman 자체 SSL 을 사용 하 는 것 외 에 nginx / apache 를 뉴스 에이전트 로 워 커 맨 에 게 전송 할 수 있 습 니 다. (이 방법 에 주의 하 세 요. workerman 부분 에 ssl 을 설정 하지 마 세 요. 그렇지 않 으 면 연결 할 수 없습니다.)
통신 원리 와 절 차 는:
1. 클 라 이언 트 가 nginx / apache 에 ws 연결 을 시작 합 니 다.
2. nginx / apache 는 ws 프로 토 콜 의 데 이 터 를 ws 프로 토 콜 데이터 로 변환 하여 Workerman 의 websocket 프로 토 콜 포트 로 전송 합 니 다.
3. Workerman 은 데 이 터 를 받 은 후에 업무 논리 처 리 를 한다.
4. Workerman 이 클 라 이언 트 에 게 메 시 지 를 보 낼 때 반대 되 는 과정 으로 데 이 터 는 nginx / apache 를 거 쳐 뉴스 프로 토 콜 로 전환 한 다음 에 클 라 이언 트 에 게 보 냅 니 다.
nginx 설정 참조
전제조건 및 준비 작업:
1. nginx 가 설치 되 어 있 고 버 전 은 1.3 보다 낮 지 않 습 니 다.
2. Workerman 이 감청 한 것 이 8282 포트 (websocket 프로 토 콜) 라 고 가정 합 니 다.
3. 인증서 (pem / crt 파일 및 key 파일) 를 / etc / nginx / conf. d / ssl 아래 에 두 었 습 니 다.
4. nginx 를 이용 하여 443 포트 를 열 어 뉴스 프 록 시 서 비 스 를 제공 할 계획 입 니 다 (포트 는 필요 에 따라 수정 할 수 있 습 니 다)
5. nginx 는 보통 사이트 서버 로 서 다른 서 비 스 를 실행 합 니 다. 원래 의 사이트 사용 에 영향 을 주지 않 기 위해 주 소 를 사용 합 니 다.  /wss  뉴스 대리 입구 로즉, 클 라 이언 트 연결 주 소 는 ws: / 도 메 인 이름 / wss 입 니 다.
nginx 설정 은 다음 과 같 습 니 다:
server {
  listen 443;

  ssl on;
  ssl_certificate /etc/ssl/server.pem;
  ssl_certificate_key /etc/ssl/server.key;
  ssl_session_timeout 5m;
  ssl_session_cache shared:SSL:50m;
  ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

  location /wss
  {
    proxy_pass http://127.0.0.1:8282;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header X-Real-IP $remote_addr;
  }
  
  # location / {}        ...
}

테스트
//          ,       
ws = new WebSocket("wss://  /wss");

ws.onopen = function() {
    alert("    ");
    ws.send('tom');
    alert("           :tom");
};
ws.onmessage = function(e) {
    alert("        :" + e.data);
};

아파 치 에이전트 이용
또한 아파 치 를 wss 에이전트 로 워 커 맨 에 게 전송 할 수 있 습 니 다. (아파 치 에이전트 SSL 을 사용 하면 워 커 맨 부분 에 ssl 을 설정 하지 마 십시오. 그렇지 않 으 면 연결 할 수 없습니다.)
준비 작업: 1. Gateway Worker 감청 8282 포트 (websocket 프로 토 콜)
2. ssl 인증 서 를 신 청 했 습 니 다. / server / httpd / cert / 아래 에 두 었 습 니 다.
3. apache 를 이용 하여 443 포트 를 지정 한 포트 8282 로 전송 합 니 다.
4. httpd - ssl. conf 가 불 러 왔 습 니 다.
5 、 openssl 설치 됨
proxy 사용 하기wstunnel_모듈 모듈
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

SSL 및 에이전트 설정
#extra/httpd-ssl.conf
DocumentRoot "/  /  "
ServerName   

# Proxy Config
SSLProxyEngine on

ProxyRequests Off
ProxyPass /wss ws://127.0.0.1:8282
ProxyPassReverse /wss ws://127.0.0.1:8282

#    SSL       ,        
SSLProtocol all -SSLv2 -SSLv3
#         
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
#       
SSLCertificateFile /server/httpd/cert/your.pem
#       
SSLCertificateKeyFile /server/httpd/cert/your.key
#      ,
SSLCertificateChainFile /server/httpd/cert/chain.pem

테스트
//          ,       
ws = new WebSocket("wss://  /wss");

ws.onopen = function() {
    alert("    ");
    ws.send('tom');
    alert("           :tom");
};
ws.onmessage = function(e) {
    alert("        :" + e.data);
};

관련 글:http://doc.workerman.net/315297

좋은 웹페이지 즐겨찾기