nginx的反向代理的WebSockets(nginx reverse proxy websocke

2019-08-17 07:03发布

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;
}

请问这是正确的方式来代理标准的HTTP以及WebSockets的? 我不希望升级头或连接设置为“升级”,除非这是浏览器发送的内容,但这些proxy_set_header线都需要的WebSockets工作。 为什么不nginx的只是转发原始升级/连接头?

我已经尝试了这一点,并发现Nginx的不代理的升级头和连接头从更改为“关闭”“升级”,如果没有这两个proxy_set_header线运行。 有了它们,连接是对于非WebSocket的要求,这也是不好的“升级”。

谢谢 :)

Answer 1:

为什么不nginx的只是转发原始升级/连接头?

从官方文档 : 因为“升级”是一个逐跳的头部,它不是从客户端传递到被代理服务器

请参见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;
    }
}

连接是用于非WebSocket的要求,这也是不好的“升级”。

你真的知道什么Connection头意味着什么? 从RFC只是报价: 在此字段中的每个连接令牌,从所述消息中移除任何报头字段(一个或多个)具有相同的名称作为连接令牌。

它怎么会不好?



文章来源: nginx reverse proxy websockets