Nginx 反向代理:上游服务器上一条路径的特殊设置

Nginx 反向代理:上游服务器上一条路径的特殊设置

Nginx 用作 Node 服务器前端的反向代理。Node 服务器有一个/ws使用 WebSocket 的路径 ( ),此路径需要特殊设置。 /ws不是目录,因此对它的请求不能带有尾部斜杠。正确的配置方法是什么?以下配置不起作用,但显示了预期效果。

location /service/ {
  proxy_read_timeout  30s;
  proxy_pass        http://service:8080/;

  # not working, requests are sent to http://service:8080/service/ws
  # instead http://service:8080/ws
  location /service/ws {  
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout  36000s;
  }
}

答案1

您当前正在使用嵌套位置,我不确定proxy_pass内部块如何继承。您可以尝试两个独立的location块,proxy_pass每个块中都有一个显式的块:

location /service/ {
    proxy_read_timeout  30s;
    proxy_pass        http://service:8080/;
}
location /service/ws {  
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout  36000s;

    proxy_pass        http://service:8080/ws;
}

相关内容