nginx 代理 websocket

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
複製代碼

 

相關文章
相關標籤/搜索