Port

在同一台伺服器上執行 websocket 伺服器和 http 伺服器

  • January 12, 2017

我正在使用 nginx 來服務 PHP 應用程序的實例,同時還執行 Ratchet 應用程序來監聽 websocket 連接。問題是,這兩個實例都使用相同的埠(80)。

如何設置伺服器以便我可以同時提供兩者?

編輯:剛回來看到這個問題多次被否決,可以理解的是,我並沒有真正明確地提出這個問題。我為此道歉。不過,我確實做了盡職調查。我會嘗試澄清我在問什麼,我可能誤解了 websocket 協議的某些方面,在這種情況下,請糾正我:

我很清楚只能有一個程序監聽一個特定的埠,我實際上有一些問題undertand是整個websocket的事情,據我了解,一個websocket請求以HTTP握手開始,之後會有機制將該會話“升級”到特定埠。

從我閱讀的內容來看,這種升級機制似乎是由網路伺服器處理的。那麼,我該如何配置 nginx 來處理這個過程呢?

總而言之,我擔心在 80 以外的埠上執行 websocket 伺服器的一件事是埠被阻塞的可能性。這種擔心是沒有根據的嗎?關於我應該如何設置的任何建議?

一個寫得很糟糕的問題,但我正在尋找的術語是反向代理。

基本上,就像 nginx 如何根據路徑或主機名將不同的請求轉發到 web 應用程序的多個實例一樣,它也可以配置為將請求“轉發”到 websocket 伺服器實例。例如:

location /socket {
   proxy_pass http://websocket;
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection $connection_upgrade;
}

upstream websocket{
   server localhost:8000;
}

map $http_upgrade $connection_upgrade {
   default Upgrade;
   '' close;
}

HTTP 請求http://hostname將被提供給通常的 html 頁面,而 websocket 連接wss://hostname/socket將被轉發到在埠 8000 上偵聽的同一伺服器上的 websocket 實例。

引用自:https://serverfault.com/questions/575467