nginx现在支持代理websockets,但是我没有找到任何关于如何执行此操作的信息,而没有应用于使用websockets的URI 的单独位置块.
我见过一些人推荐这种方法的一些变化:
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://host:port;
}
Run Code Online (Sandbox Code Playgroud)
这是代理标准HTTP以及websockets的正确方法吗?我不希望将升级标头或连接设置为"升级",除非这是浏览器发送的内容,但这些proxy_set_header行是websockets工作所必需的.为什么nginx只转发原始的Upgrade/Connection标头?
我已经对此进行了实验,发现如果在没有两个proxy_set_header行的情况下运行,nginx不会代理Upgrade标头并将Connection标头从'upgrade'更改为'close'.使用它们,Connection是非websocket请求的"升级",这也很糟糕.
谢谢 :)
VBa*_*art 22
为什么nginx只转发原始的Upgrade/Connection标头?
从官方文档:由于"升级"是逐跳标头,它不会从客户端传递到代理服务器
请参阅RFC 2616.
我不希望将升级标头或连接设置为"升级",除非这是浏览器发送的内容,
还有一个例子:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
...
location /chat/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
Run Code Online (Sandbox Code Playgroud)
连接是非websocket请求的"升级",这也很糟糕.
你真的知道Connection标题是什么意思吗?只需引用RFC:对于此字段中的每个连接令牌,从消息中删除任何与连接令牌同名的头字段.
怎么会这么糟糕?
| 归档时间: |
|
| 查看次数: |
12886 次 |
| 最近记录: |