天天看點

Nginx之——配置WebSocket

Nginx配置WebSocket反向代理

問題描述

目前項目中需要使用到WebSocket來進行通訊,是以就寫了個Nginx反向代理WebSocket的配置檔案.

很簡單,但是很有效,能夠橫向擴充WebSocket服務端

先直接展示配置檔案,如下(使用的話直接複制,然後改改ip和port即可)

map $http_upgrade $connection_upgrade { 
  default upgrade; 
  '' close; 
} 
upstream wsbackend{ 
  server ip1:port1; 
  server ip2:port2; 
  keepalive 1000; 
} 

server { 
  listen 20038; 
  location /{ 
    proxy_http_version 1.1; 
    proxy_pass http://wsbackend; 
    proxy_redirect off; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_read_timeout 3600s; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $connection_upgrade; 
  } 
}      

首先:

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

表示的是 
1. 如果 $http_upgrade 不為 '' (空),則 $connection_upgrade 為 upgrade 
2. 如果 $http_upgrade 為 '' (空),則 $connection_upgrade 為 close      

其次:

upstream wsbackend{ 
  server ip1:port1; 
  server ip2:port2; 
  keepalive 1000; 
} 

表示的是 nginx負載均衡 
1. 兩台伺服器 (ip1:port1)和(ip2:port2) 
2. keepalive 1000 表示的是每個nginx程序中上遊伺服器保持的空閑連接配接,當空閑連接配接過多時,會關閉最少使用的空閑連接配接.當然,這不是限制連接配接總數的,可以想象成空閑連接配接池的大小.設定的值應該是上遊伺服器能夠承受的      
server { 
  listen 20038; 
  location /{ 
    proxy_http_version 1.1; 
    proxy_pass http://wsbackend; 
    proxy_redirect off; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_read_timeout 3600s; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $connection_upgrade; 
  } 
} 

表示的是監聽的伺服器的配置 
1. listen 20038 表示 nginx 監聽的端口 
2. locations / 表示監聽的路徑(/表示所有路徑,通用比對,相當于default) 
3. proxt_http_version 1.1 表示反向代理發送的HTTP協定的版本是1.1,HTTP1.1支援長連接配接 
4. proxy_pass http://wsbackend; 表示反向代理的uri,這裡可以使用負載均衡變量 
5. proxy_redirect off; 表示不要替換路徑,其實這裡如果是/則有沒有都沒關系,因為default也是将路徑替換到proxy_pass的後邊 
6. proxy_set_header Host $host; 表示傳遞時請求頭不變, $host是nginx内置變量,表示的是目前的請求頭,proxy_set_header表示設定請求頭 
7. proxy_set_header X-Real-IP $remote_addr; 表示傳遞時來源的ip還是現在的用戶端的ip 
8. proxy_read_timeout 3600s; 表的兩次請求之間的間隔超過 3600s 後才關閉這個連接配接,預設的60s.自動關閉的元兇 
9. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 表示X-Forwarded-For頭不發生改變 
10. proxy_set_header Upgrade $http_upgrade; 表示設定Upgrade不變 11. proxy_set_header Connection $connection_upgrade; 表示如果 $http_upgrade為upgrade,則請求為upgrade(websocket),如果不是,就關閉連接配接      

繼續閱讀