如何在 nginx 反向代理后面托管 websocket

How to host websocket behind nginx reverse proxy

在我的 VPS 上,我只有一个端口,这就是我使用 proxer 的原因——一个 dockerized nginx反向代理,您在其中提供域名和应该重定向到的本地端口。

我已成功设置 socket.io 服务器 轮询 传输(因为它使用 http 方法),但我想使用 websocket 传输,这是它失败的地方。它告诉我它无法与此 url.

建立 wss:// 连接

这是我使用的nginx反向代理代码:

for cfg in $(cat /config); do
    domain=$(echo $cfg | cut -f1 -d=)
    destination=$(echo $cfg | cut -f2 -d=)
    echo ">> Building config for $domain";

    config=$(cat <<EOF
server {
    listen       80;
    listen  [::]:80;
    server_name  $domain;
    location / {
        proxy_pass $destination;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        #proxy_set_header Connection $connection_upgrade;
        proxy_ssl_name $host;
        proxy_ssl_server_name on;
        proxy_ssl_verify off;
        proxy_ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        proxy_ssl_session_reuse off;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 120;
        proxy_send_timeout 120;
        proxy_connect_timeout 120;
    }
}
EOF
)
    
    # append new config to the end of nginx config file
    echo "$config" >>$out
done

我注意到这一行被注释掉了,我读到 wss://:

需要它
#proxy_set_header Connection $connection_upgrade;

为什么被注释掉了? 更改此行会影响 http 代理吗? 我应该做哪些更改以在其中一个域上允许 wss://

这个工具几乎包含设置 nginx 反向代理所需的一切。

请注意,由于其配置中的注释行,它不支持开箱即用的 wss://

#proxy_set_header Connection $connection_upgrade;

取消注释,重建并拥有一个支持 wss:// :)

的快乐反向代理