當前位置: 首頁> 最新文章列表> Nginx配置WebSocket代理支持的完整指南

Nginx配置WebSocket代理支持的完整指南

M66 2025-07-09

理解WebSocket協議與Nginx的作用

WebSocket是一種基於TCP的全雙工通信協議,它允許服務器與客戶端之間進行實時、持久的雙向通信。這種特性使它非常適合用於即時聊天、實時數據推送等場景。在實際部署中,通常需要藉助Nginx作為反向代理服務器,來中轉和管理WebSocket連接請求。

確保已安裝Nginx

首先,請確認你的服務器環境中已正確安裝Nginx。如果尚未安裝,可根據操作系統執行對應的安裝命令完成部署。

修改Nginx配置支持WebSocket

要使Nginx支持WebSocket,需要對配置文件進行調整。以下是在http模塊中添加的配置示例:

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

upstream backend {
    server 127.0.0.1:8080;
}

這段配置的作用是將客戶端請求頭中的Upgrade字段映射為一個自定義變量$connection_upgrade ,以便後續代理使用。同時定義了一個名為backend的上游服務器,指向本地的8080端口。

設置server塊實現WebSocket代理

server塊中添加如下location配置,用於處理匹配路徑的WebSocket請求:

location /websocket {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
}

此配置用於指定代理路徑、轉發地址以及設置必須的請求頭字段,從而確保WebSocket連接可以順利被代理。

重啟Nginx使配置生效

修改配置文件後,保存並關閉文件,然後在命令行中重啟Nginx服務以使配置生效:

sudo service nginx restart

測試WebSocket連接是否成功

你可以使用WebSocket客戶端工具,或創建一個簡單的網頁測試WebSocket連接是否有效。以下是一個基礎示例:

var ws = new WebSocket("ws://your_domain/websocket");

ws.onopen = function() {
    console.log("Connected to WebSocket");
};

ws.onmessage = function(event) {
    console.log("Received message: " + event.data);
};

ws.onclose = function() {
    console.log("Disconnected from WebSocket");
};

將上述代碼保存為HTML文件,並在瀏覽器中打開。如果在開發者工具中看到連接成功的提示,即表示配置成功。

總結

通過配置Nginx的代理功能,我們能夠為後端應用提供WebSocket協議的支持。這種方式不僅提高了通信效率,還借助Nginx的高性能與安全特性,使整個系統更加穩定和可擴展。需要注意的是,Nginx本身並不處理WebSocket協議,它只是作為中間代理,將連接轉發給後端應用處理。若你需要實現更複雜的WebSocket服務邏輯,建議使用專用的後端WebSocket服務器進行處理。