링크 ux 서버 생 성 ws 서비스 https + ws 설정 안내
5901 단어 서버Nginxhttp 프로 토 콜workerman
뉴스 서비스 만 들 기
물음:
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
집 서버 설계 (하드웨어 편)자신의 Redmine이나 ownCloud를 운용하기 위해 사쿠라 VPS, DigitalOcean, OpenShift 등을 놀랐습니다만, 침착 해 왔으므로 현상을 정리하고 싶습니다. 먼저 하드웨어 구성을 정리합니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.