nginx 代理 websocket
nginx 首先確認版本必須是1.3以上nginx
map指令的做用:
該做用主要是根據客戶端請求中$http_upgrade 的值,來構造改變$connection_upgrade的值,即根據變量$http_upgrade的值建立新的變量$connection_upgrade,
建立的規則就是{}裏面的東西。其中的規則沒有作匹配,所以使用默認的,即 $connection_upgrade 的值會一直是 upgrade。而後若是 $http_upgrade爲空字符串的話,
那值會是 close。
因爲後期項目修改 如今將ws地址改成 wss://school.zhuzhida.vip/ws
schoolsocket.zhuzhida.vip.confweb
#必須添加的
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
#監聽websocket
upstream websocket {
#ip_hash;
#轉發到服務器上相應的ws端口
server localhost:3344;
#server localhost:8011;
}
server {
listen 80;
server_name schoolsocket.zhuzhida.vip;
location / {
#轉發到http://websocket
proxy_pass http://websocket;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#升級http1.1到 websocket協議
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
複製代碼
測試一下
1.確保服務未被轉發前ws端口是否正常bash
wscat -c localhost:3344
複製代碼
服務器返回權限不足是由於我ws服務首次會話有token校驗,此處返回權限不足斷開鏈接爲正常現象服務器
2.外網測試nginx轉發
wscat -c schoolsocket.zhuzhida.vip
複製代碼