nginx 现在支持代理 websockets,但是如果没有单独的location块适用于使用 websockets 的 URI,我无法找到有关如何执行此操作的任何信息。
我见过一些人推荐这种方法的一些变体:
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://host:port;
}
这会是代理标准 HTTP 和 websockets 的正确方法吗?
我不希望Upgrade
标题或Connection
设置为,upgrade
除非这是浏览器发送的内容,但这些proxy_set_header
行是 websocket 工作所必需的。
为什么 nginx 不只是转发原始的 Upgrade/Connection 标头?
我已经对此进行了试验,发现 nginx 不会代理Upgrade
标头并将标头更改Connection
为close
fromupgrade
如果在没有这两proxy_set_header
行的情况下运行。与它们一起,Connection
用于upgrade
非 websocket 请求,这也很糟糕。