NGINX Websocket 和 SSL 配置

NGINX Websocket 和 SSL 配置

我正在尝试设置 websocket 连接(wss)。我的域使用 ssl (certbot) 并由 Nginx 提供支持。我不确定如何配置我的/etc/nginx/sites-available/domain.com文件。

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
...
}

我将以下内容添加到我的配置块中:

location /websocket {
    proxy_pass         https://domain.com;
    proxy_http_version 1.1;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection "upgrade";
    proxy_set_header   Host $host;
}

通过以下方式连接时wss://domain.com/,我收到错误:

WebSocket connection to 'wss://domain.com/' failed: 
Error during WebSocket handshake: Unexpected response code: 200

大多数示例都使用 nodejs 框架来服务他们的网站,但我使用的是 php。

答案1

您的 websocket 端点在提供的 nginx 配置中配置为托管在/websocket服务器内的位置,但您正在尝试连接到 root URL wss://domain.com

在升级之前,Websocket 连接是普通的 HTTP(在本例中带有 TLS 包装器)会话,因此您必须确保用于访问服务的 URL 包含所有相关的路径指示符,例如wss://domain.com/websocket

相关内容