Ubuntu

NGINX Websockets 和 SSL 配置

  • March 9, 2019

我正在嘗試設置 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。

您的 websocket 端點在提供的 nginx 配置中配置為託管在/websocket伺服器內的位置,但您正在嘗試連接到根 URL wss://domain.com

在升級發生之前,websocket 連接是一個普通的 HTTP(在這種情況下帶有 TLS 包裝器)會話,因此您必須確保用於訪問服務的 URL 包含所有相關的路徑指示符,例如wss://domain.com/websocket.

引用自:https://unix.stackexchange.com/questions/472162