nginx websocket代理:使用定义的位置

时间:2019-01-17 15:18:40

标签: nginx nginx-reverse-proxy nginx-config

我正在尝试setup websocket proxy来定义位置(/ws),但是它不起作用。但是使用root(/)作为位置对我有用。

有效:

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://echo.websocket.org;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_buffering off;
    }
}

不起作用:

server {
    listen       80;
    server_name  localhost;

    location /ws {
        proxy_pass http://echo.websocket.org;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_buffering off;
    }
}

我还检查了服务器响应:

curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: localhost:8888" -H "Origin: http://localhost:8888/ws" http://localhost:8888/ws

HTTP/1.1 404 WebSocket Upgrade Failure
Server: nginx/1.13.12
Date: Thu, 17 Jan 2019 15:15:50 GMT
Content-Type: text/html
Content-Length: 77
Connection: keep-alive
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Headers: authorization
Access-Control-Allow-Headers: x-websocket-extensions
Access-Control-Allow-Headers: x-websocket-version
Access-Control-Allow-Headers: x-websocket-protocol
Access-Control-Allow-Origin: http://localhost:8888/ws

<html><head></head><body><h1>404 WebSocket Upgrade Failure</h1></body></html>

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我认为这里的问题在于模式匹配。首先,您必须从客户端将Websocket网址指定为 ws:// localhost:80 / ws / 请注意,您必须在网址末尾输入( / ),并在NGINX服务器端以这种方式进行配置:

server {
listen       80;
server_name  localhost;

location /ws/ {
    proxy_pass http://echo.websocket.org;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_buffering off;
}}

请注意,您必须提供 / ws / 位置参考。