当前位置: 首页 > news >正文

nginx配置websocket

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(尤其在多层代理环境中)。
  • ​​安全性​​:这些配置不会暴露敏感信息,但需确保后端服务信任这些头部(防止伪造)。
http://www.dtcms.com/a/263841.html

相关文章:

  • 用java,把12.25.pdf从最后一个点分割,得到pdf
  • Elastic 构建 Elastic Cloud Serverless 的历程
  • CertiK《Hack3d:2025年第二季度及上半年Web3.0安全报告》(附报告全文链接)
  • 61、【OS】【Nuttx】【构建】向量表
  • Redis-7.4.3-Windows-x64下载安装使用
  • 浅谈Docker Kicks in的应用
  • ‌Webpack打包流程
  • 为什么时序数据库IoTDB选择Java作为开发语言
  • Milvus docker-compose 部署
  • t检验​、​z检验、χ²检验中的P值
  • Vue3 使用 i18n 实现国际化完整指南
  • 浏览器F12开发者工具的使用
  • 大模型MCP技术之一句话安装Hadoop
  • DML-2-更新和删除
  • Python 数据分析:numpy,抽提,整数数组索引与基本索引扩展(元组传参)。听故事学知识点怎么这么容易?
  • JavaWeb笔记02
  • hello算法_C++_ 最差、最佳、平均时间复杂度
  • Spring事务传播行为?失效情况?(详解)
  • 设计模式精讲 Day 20:状态模式(State Pattern)
  • imx6ull芯片中断机制6.24-6.25
  • Python中字符串isalpha()函数详解
  • 设计模式-责任链, 责任链+ 模板方法模式相结合
  • 抽奖概率-数值练习题
  • AR衍射光波导设计遇瓶颈,OAS 光学软件来破局
  • 【Golang面试题】Go结构体的特点,与其它语言的区别
  • 学习昇腾开发的第11天--主要接口调用流程
  • 逐步构建高性能http服务器及聊天室服务器
  • 青否数字人直播再创新纪录!“人工智能+消费”开新篇?zhibo175
  • ABB CH-3185 3 bhl 000986 p 1006 ab ability 800 xa自动化系统
  • 【V6.0 - 听觉篇】当AI学会“听”:用声音特征捕捉视频的“情绪爽点”