nginx配置websocket

发布于:2025-07-02 ⋅ 阅读:(24) ⋅ 点赞:(0)

nginx 配置支持websocket服务

location /ilab/api/task {
			proxy_pass https://127.0.0.1:8080;
			
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade; 
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header X-Real-IP $remote_addr;
        }

这段 Nginx 配置是与反向代理(proxy_pass)相关的 HTTP 头部和协议设置,主要用于 WebSocket 支持、客户端真实 IP 传递等高级代理功能。以下是逐行解释:

1. proxy_http_version 1.1;
​​作用​​:强制代理使用 HTTP/1.1 协议(默认是 HTTP/1.0)。
​​为什么需要​​:
HTTP/1.1 支持长连接(Keep-Alive),提升性能。
​​WebSocket 必须依赖 HTTP/1.1​​(因为 WebSocket 握手需要在 HTTP/1.1 的 Upgrade 头中完成)。

2. proxy_set_header Upgrade $http_upgrade;
​​作用​​:将客户端的 Upgrade 请求头原样传递给后端服务器。
​​关键变量​​:
$http_upgrade:客户端请求中的 Upgrade 头值(例如 websocket)。
​​典型场景​​:
当客户端发起 WebSocket 连接时,请求头会包含 Upgrade: websocket,此配置确保该头部被传递到后端。

3. proxy_set_header Connection $connection_upgrade;
​​作用​​:动态设置 Connection 头,根据客户端请求决定是否保持连接升级。
​​关键变量​​:
$connection_upgrade:如果客户端请求包含 Upgrade 头,则值为 upgrade,否则为 close。
​​与 WebSocket 的关系​​:
配合 Upgrade 头,告诉后端服务器需要将连接升级为 WebSocket。

4. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
​​作用​​:添加客户端真实 IP 到 X-Forwarded-For 头。
​​关键变量​​:
KaTeX parse error: Double subscript at position 12: proxy_add_x_̲forwarded_for:自…remote_addr)到现有的 X-Forwarded-For 头(如果存在)。
​​为什么重要​​:
后端服务器可以通过此头获取原始客户端的真实 IP(而不是 Nginx 的 IP)。
格式示例:X-Forwarded-For: 客户端IP, 代理1IP, 代理2IP

5. proxy_set_header X-Real-IP $remote_addr;
​​作用​​:将客户端真实 IP 直接传递给后端,存放到 X-Real-IP 头。
​​关键变量​​:
$remote_addr:客户端的真实 IP 地址。
​​与 X-Forwarded-For 的区别​​:
X-Real-IP 只包含最后一个直连客户端的 IP,而 X-Forwarded-For 可能包含代理链中的所有 IP。

这段 Nginx 配置是与反向代理(proxy_pass)相关的 HTTP 头部和协议设置,主要用于 WebSocket 支持、客户端真实 IP 传递等高级代理功能。以下是逐行解释:

  1. proxy_http_version 1.1;
    ​​作用​​:强制代理使用 HTTP/1.1 协议(默认是 HTTP/1.0)。
    ​​为什么需要​​:
    HTTP/1.1 支持长连接(Keep-Alive),提升性能。
    ​​WebSocket 必须依赖 HTTP/1.1​​(因为 WebSocket 握手需要在 HTTP/1.1 的 Upgrade 头中完成)。
  2. proxy_set_header Upgrade $http_upgrade;
    ​​作用​​:将客户端的 Upgrade 请求头原样传递给后端服务器。
    ​​关键变量​​:
    $http_upgrade:客户端请求中的 Upgrade 头值(例如 websocket)。
    ​​典型场景​​:
    当客户端发起 WebSocket 连接时,请求头会包含 Upgrade: websocket,此配置确保该头部被传递到后端。
  3. proxy_set_header Connection $connection_upgrade;
    ​​作用​​:动态设置 Connection 头,根据客户端请求决定是否保持连接升级。
    ​​关键变量​​:
    $connection_upgrade:如果客户端请求包含 Upgrade 头,则值为 upgrade,否则为 close。
    ​​与 WebSocket 的关系​​:
    配合 Upgrade 头,告诉后端服务器需要将连接升级为 WebSocket。
  4. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    ​​作用​​:添加客户端真实 IP 到 X-Forwarded-For 头。
    ​​关键变量​​:
    KaTeX parse error: Double subscript at position 12: proxy_add_x_̲forwarded_for:自…remote_addr)到现有的 X-Forwarded-For 头(如果存在)。
    ​​为什么重要​​:
    后端服务器可以通过此头获取原始客户端的真实 IP(而不是 Nginx 的 IP)。
    格式示例:X-Forwarded-For: 客户端IP, 代理1IP, 代理2IP
  5. proxy_set_header X-Real-IP $remote_addr;
    ​​作用​​:将客户端真实 IP 直接传递给后端,存放到 X-Real-IP 头。
​​关键变量​​:

$remote_addr:客户端的真实 IP 地址。
​​与 X-Forwarded-For 的区别​​:
X-Real-IP 只包含最后一个直连客户端的 IP,而 X-Forwarded-For 可能包含代理链中的所有 IP。

典型使用场景
  • ​​WebSocket 代理​​
    前 3 行(HTTP/1.1 + Upgrade + Connection)是 WebSocket 代理的必需配置,例如:
location /ws/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
}
  • ​​传递真实客户端 IP​​
    后 2 行(X-Forwarded-For + X-Real-IP)常用于日志记录、限速或地理定位等需要真实 IP 的场景。
总结
  • WebSocket 支持​​:通过强制 HTTP/1.1 并传递 Upgrade 和 Connection 头。
  • ​​IP 透传​​:确保后端服务能获取客户端真实 IP(尤其在多层代理环境中)。
  • ​​安全性​​:这些配置不会暴露敏感信息,但需确保后端服务信任这些头部(防止伪造)。

网站公告

今日签到

点亮在社区的每一天
去签到