将nginx配置为websocket的代理

时间:2014-07-06 14:47:35

标签: nginx proxy websocket

我有一个带有websocket的应用程序,它位于:

http://localhost:8888/something/ws

我想使用nginx作为代理,但连接的转发不起作用。这是我的配置文件:

upstream backend {
    server 127.0.0.1:8888;
}

server {
    listen 80;

    server_name localhost;

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://backend;
        proxy_next_upstream error;
    }

    location /something/ws {

        proxy_pass http://backend;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

是什么错我是否必须重写路径或其他内容?


更新

Ubuntu 12.04。与nginx 1.1一起发货。在将nginx升级到1.6之前,我必须删除nginx-common和nginx-full,否则重新安装nginx 1.1 ...

1 个答案:

答案 0 :(得分:2)

您可以尝试以下内容:

  location /something/ws/ {
            proxy_pass http://backend;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            # Path rewriting
            rewrite /something/ws/(.*) /$1 break;
            proxy_redirect off;
        }

关键是路径重写。