답변:
nginx는 이제 1.3.13 릴리스에서 Websocket을 지원합니다. 사용 예 :
location /websocket/ {
proxy_pass http://backend_host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
nginx 변경 로그 및 WebSocket 프록시 문서를 확인할 수도 있습니다.
proxy_read_timeout
작동에 대한 답변을 편집했습니다.
location
지시어는 하나 server
이상의 location
지시어 안에 있습니다 ( location docs 참조 ). backend_host
는 프록시 할 서버 그룹 또는 하나의 그룹입니다 upstream
( 업스트림 문서 참조 ).
용감한 Ops 프로그래머 그룹이 새로운 nginx_tcp_proxy_module을 사용하는 브랜드로 상황을 해결 했으므로 걱정하지 마십시오.
2012 년 8 월에 작성되었으므로 미래에 온다면 숙제를해야합니다.
CentOS를 사용한다고 가정합니다.
init.d/nginx
스크립트 포함 )yum install pcre pcre-devel openssl openssl-devel
NGINX 빌드에 필요한 다른 라이브러리들다시 CentOS를 가정합니다.
cd /usr/local/
wget 'http://nginx.org/download/nginx-1.2.1.tar.gz'
tar -xzvf nginx-1.2.1.tar.gz
cd nginx-1.2.1/
patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
./configure --add-module=/path/to/nginx_tcp_proxy_module --with-http_ssl_module
(필요한 경우 더 많은 모듈을 추가 할 수 있습니다)make
make install
선택 과목:
sudo /sbin/chkconfig nginx on
다시 사용하려면 이전 구성 파일을 먼저 복사하십시오.
중요 :tcp {}
conf에서 최상위 레벨에 지시문 을 작성해야합니다 . 지시문 안에 있지 않은지 확인하십시오 http {}
.
아래 구성 예는 단일 업스트림 웹 소켓 서버와 SSL 및 비 SSL에 대한 두 개의 프록시를 보여줍니다.
tcp {
upstream websockets {
## webbit websocket server in background
server 127.0.0.1:5501;
## server 127.0.0.1:5502; ## add another server if you like!
check interval=3000 rise=2 fall=5 timeout=1000;
}
server {
server_name _;
listen 7070;
timeout 43200000;
websocket_connect_timeout 43200000;
proxy_connect_timeout 43200000;
so_keepalive on;
tcp_nodelay on;
websocket_pass websockets;
websocket_buffer 1k;
}
server {
server_name _;
listen 7080;
ssl on;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.key;
timeout 43200000;
websocket_connect_timeout 43200000;
proxy_connect_timeout 43200000;
so_keepalive on;
tcp_nodelay on;
websocket_pass websockets;
websocket_buffer 1k;
}
}
이것은 나를 위해 일했다 :
location / {
# redirect all HTTP traffic to localhost:8080
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# WebSocket support
도둑은 나를 위해 그것을했다. 이전에 포트 400을 전달하려고했지만 wss는 443 개 이상 작동합니다. 미래의 독자 :)
SSL을 사용하는 .net 코어 2.0 Nginx 용
location / {
# redirect all HTTP traffic to localhost:8080
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
}
이것은 나를 위해 일했다
나를 위해, 그것은 proxy_pass
위치 설정으로 내려 왔습니다 . HTTPS 프로토콜을 사용하도록 전환하고 노드 서버쪽에 유효한 SSL 인증서를 설정해야했습니다. 그렇게하면 외부 노드 서버를 도입 할 때 IP 만 변경하면 나머지는 모두 동일한 구성으로 유지됩니다.
나는 이것이 길을 따라 누군가를 도울 수 있기를 바랍니다 ... 나는 항상 문제를 쳐다보고 있었다 ... 한숨 ...
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream nodeserver {
server 127.0.0.1:8080;
}
server {
listen 443 default_server ssl http2;
listen [::]:443 default_server ssl http2 ipv6only=on;
server_name mysite.com;
ssl_certificate ssl/site.crt;
ssl_certificate_key ssl/site.key;
location /websocket { #replace /websocket with the path required by your application
proxy_pass https://nodeserver;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_intercept_errors on;
proxy_redirect off;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_ssl_session_reuse off;
}
}
localtion /horizon
했지만 작동하지 않습니다. 만 localtion /
또는 location /websockify
작동합니다. 이유를 모릅니다 ...
Pankaj Malhotra의 간결하고 간결한 기사는 NGINX로이 작업을 수행하는 방법에 대해 설명하고 있으며 여기에서 확인할 수 있습니다 .
기본 NGINX 구성은 다음과 같습니다.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream appserver {
server 192.168.100.10:9222; # appserver_ip:ws_port
}
server {
listen 8888; // client_wss_port
ssl on;
ssl_certificate /path/to/crt;
ssl_certificate_key /path/to/key;
location / {
proxy_pass http://appserver;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
nginx / 1.14.0 사용
포트 8097에서 실행되는 웹 소켓 서버가 있고 사용자가 포트 8098의 wss에 연결하면 nginx는 내용을 해독하고 웹 소켓 서버로 전달합니다.
그래서 나는이 구성 파일을 가지고 있습니다 (제 경우에는 /etc/nginx/conf.d/default.conf
)
server {
listen 8098;
ssl on;
ssl_certificate /etc/ssl/certs/combined.pem;
ssl_certificate_key /root/domain.key;
location / {
proxy_pass http://hostname:8097;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}