Port
在同一台伺服器上執行 websocket 伺服器和 http 伺服器
我正在使用 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 實例。