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

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.xdnf.cn/news/14917.html

相关文章:

  • 如何在电脑上完全抹去历史记录
  • Ubuntu 20.04 下 OpenVINO 2024 安装与配置
  • 与后端现场联调mock数据
  • 内网ubuntu系统安装mysql
  • 直播 APP 开发需要多少成本
  • SpringBoot -- 自动配置原理
  • 回写缓存为何需要脏位?
  • 【MySQL基础】MySQL索引全面解析:从原理到实践
  • Linux 系统管理:自动化运维与容器化部署
  • AI编程实战:Cursor黑科技全解析
  • uniapp小程序蓝牙打印通用版(集成二维码打印)
  • 如何在Vue3中正确使用ref和reactive?
  • 2025年数据可视化十大创新趋势
  • 【分布式】自定义统一状态机流转设计
  • 【Pandas】pandas DataFrame Flags
  • Java开发新变革!飞算JavaAI深度剖析与实战指南
  • 【软考中级·软件评测师】下午题·面向对象测试之架构考点全析:分层、分布式、微内核与事件驱动
  • 网络拓扑图绘制全流程:从架构解析到工具实战
  • CAU数据挖掘 支持向量机
  • AI 情感陪伴的乱与治:在困境中探寻未来航道
  • Windows如何安装beego环境问题解
  • Android Telephony 网络状态中的 NAS 信息
  • API接口安全-2:签名、时间戳与Token如何联手抵御攻击
  • 后台管理系统的诞生 - 利用AI 1天完成整个后台管理系统的微服务后端+前端
  • vue-33(实践练习:使用 Nuxt.js 和 SSR 构建一个简单的博客)
  • LabVIEW键盘鼠标监测控制
  • SpringBoot 启动入口深度解析:main方法执行全流程
  • 颠覆传统加密:微算法科技创新LSQb算法,提升量子图像处理速度
  • 【debug日记】解决 Conda 激活命令未正确配置的问题
  • Redis学习笔记——黑马点评 附近商铺到UV统计 完结