天天看點

Nginx配置轉發WebSocket功能

最近做個一個項目有一項要求為,服務端的變化要實時的更新前端,是以想到了使用WebScoket實作。完成後使用Nginx做了反向代理,一開始通路不了,後來發現需要在Nginx添加WebSocket的轉發配置。

一、網上配置

在網上找到大部配置設定置如下所示

location /websocket/ {
        proxy_pass http://myserver;
 
        proxy_http_version 1.1;
        proxy_read_timeout 360s;   
        proxy_redirect off;   
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection "upgrade";    #配置連接配接為更新連接配接
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
           

 使用如上連接配接,如果所有的連接配接僅僅為 "ws" 協定的請求是沒有問題的,但是如果要及支援 http 請求又支援 ws 請求上述配置就不起作用了。

二、既支援http又支援 ws 的配置。

 通過nginx官方關于WebSocket的配置得知,可以自定義變量。故配置如下,就可以做到既支援 ws 請求,又支援 http請求。

http {

   #自定義變量 $connection_upgrade
    map $http_upgrade $connection_upgrade { 
        default          keep-alive;  #預設為keep-alive 可以支援 一般http請求
        'websocket'      upgrade;     #如果為websocket 則為 upgrade 可更新的。
    }

    server {
        ...

        location /chat/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade; #此處配置 上面定義的變量
            proxy_set_header Connection $connection_upgrade;
        }
    }
           

繼續閱讀