代码之家  ›  专栏  ›  技术社区  ›  wuampa

nginx作为websockets和post请求的转发代理

  •  2
  • wuampa  · 技术社区  · 6 年前

    我目前正在使用nginx作为websockets的前向代理,到目前为止它运行良好。客户端连接到:

    var ws = new WebSocket('ws://10.30.0.142:8020/');
    

    我也想转发一个邮件请求。在本例中,客户机将/post添加到ws地址,以便将地址扩展到“ws://10.30.0.142:8020/post”。但是,要求返回该地址:

    http://10.30.0.142/post 404 (Not Found)
    

    我正在使用以下配置文件(nginx.conf),这很可能是post请求(location/post/)的错误:

    upstream websocket {
            server 127.0.0.1:8010;
    }
    
    server {
            listen       8020;
            server_name  server;
            root /var/www/html;
            expires off;
    
            keepalive_timeout 0;
    
            access_log /dev/null;
    
            location / {
                proxy_pass http://websocket;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
            }
    
            location /post/ {
                proxy_pass http://127.0.0.1:8010;
           }
    
            location ~* \.(?:css|js|map|jpe?g|gif|png)$ { }
    
        }
    
     }
    

    如何正确配置此文件以解决此问题?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Jonas    6 年前

    幸运的是,修复方法非常简单:只需更改行 location /post/ { location /post { ,额外的斜杠只匹配 /post/<something else> 根据你的描述,这不是你想要的。

    事实上,你甚至想把这条线改成 location =/post { 如果您只想将请求与 /post ,而不是请求 /post<some other string> /post/<some other string> 也。