nginx ws 无效 URL 前缀
nginx ws invalid URL prefix
第一次与 nginx
.
我有一个 nodejs WebSocket 服务器在 ws://service_name:3600
.
监听
我正在使用 docker-compose
:
version: "2"
services:
# stuff
service_name:
image: imagename
ports:
- 3600:3600
links:
# stuff
- proxy
proxy:
image: image-from-nginx-with-custom-config
ports:
- 80:80
- 443:443
- 8443:8443
我的配置:
// stuff
server {
listen 8443;
server_name localhost;
ssl on;
ssl_certificate /etc/nginx/certs/crt.pem;
ssl_certificate_key /etc/nginx/certs/key.pem;
keepalive_timeout 60;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
location / {
proxy_pass ws://service_name:3600;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
我在启动时得到 nginx: [emerg] invalid URL prefix in /etc/nginx/conf.d/default.conf
。
所以nginx不识别ws
,怎么办?
在 nginx 中,您仍然需要在 url 中使用 http
作为协议,而不是 ws
。
proxy_pass http://service_name:3600;
浏览器需要 ws
和 wss
协议,在服务器端,您在下面添加以通过 http
处理 websockets
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
第一次与 nginx
.
我有一个 nodejs WebSocket 服务器在 ws://service_name:3600
.
监听
我正在使用 docker-compose
:
version: "2"
services:
# stuff
service_name:
image: imagename
ports:
- 3600:3600
links:
# stuff
- proxy
proxy:
image: image-from-nginx-with-custom-config
ports:
- 80:80
- 443:443
- 8443:8443
我的配置:
// stuff
server {
listen 8443;
server_name localhost;
ssl on;
ssl_certificate /etc/nginx/certs/crt.pem;
ssl_certificate_key /etc/nginx/certs/key.pem;
keepalive_timeout 60;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
location / {
proxy_pass ws://service_name:3600;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
我在启动时得到 nginx: [emerg] invalid URL prefix in /etc/nginx/conf.d/default.conf
。
所以nginx不识别ws
,怎么办?
在 nginx 中,您仍然需要在 url 中使用 http
作为协议,而不是 ws
。
proxy_pass http://service_name:3600;
浏览器需要 ws
和 wss
协议,在服务器端,您在下面添加以通过 http
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";