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

Nginx反向代理配置支持websocket

一、官方文档

WebSocket proxying

       为了将客户端和服务器之间的连接从HTTP/1.1转换为WebSocket,使用了HTTP/1.1中可用的协议切换机制(RFC 2616: Hypertext Transfer Protocol – HTTP/1.1)。

       然而,这里有一个微妙之处:由于“升级”是逐跳报头(hop-by-hop),因此它不会从客户端传递到代理服务器。使用正向代理,客户端可以使用CONNECT方法来规避此问题。但是,这不适用于反向代理,因为客户端不知道任何代理服务器,并且需要在代理服务器上进行特殊处理。

       从1.3.13版本开始,nginx实现了特殊的操作模式,允许在客户端和代理服务器之间建立一个隧道,如果代理服务器返回一个带有代码101(切换协议)的响应,并且客户端通过请求中的“升级”头请求协议切换。

代理服务器nginx进行协议升级

二、基础配置 (只能处理websocket协议)

如上所述,包括“升级”和“连接”在内的逐跳报头不会从客户端传递到代理服务器,因此为了让代理服务器知道客户端将协议切换到WebSocket的意图,这些报头必须显式传递:

location /chat/ {proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
}

简单来说:是如果想要nginx支持websocket 需要配置

proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";

三、复杂配置 (可以同时处理websocket和http协议)

http {map $http_upgrade $connection_upgrade {default upgrade;''      close;}server {...location /chat/ {proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;}}

map语法解释:

当Upgrade是 ‘’ 的时候,设置Connection 为close,其他默认设置成upgrade,这样配置后,nginx就可以同时处理websockt和http请求了。

总结

通过Http升级机制将Http升级为WebSocket。Nginx代理服务器通过修改配置的方式解决了WebSocket属于hop-by-hop协议的问题、并通过保持分别与客户端和服务端的连接一直处于打开状态从而实现WebSokcet的代理。

http://www.lryc.cn/news/449183.html

相关文章:

  • C# 游戏引擎中的协程
  • 如何封装微信小程序中的图片上传功能
  • 被问界/理想赶超!奔驰CEO再度“出马”,寻找中国外援
  • 魔改xjar支持springboot3,
  • python json文件读写
  • Android常用C++特性之std::find_if
  • 19 vue3之自定义指令Directive按钮鉴权
  • 数据资产新范式,URP城市焕新平台东博会首发!
  • 儿童乐园软件下载安装 佳易王游乐场会员扣次管理系统操作教程
  • windows下 Winobj.exe工具使用说明c++
  • 提示词工程 (Prompt Engineering) 最佳实践
  • 【读写分离?聊聊Mysql多数据源实现读写分离的几种方案】
  • C++游戏
  • 探索顶级低代码开发平台,实现创新
  • Html--笔记01:使用软件vscode,简介Html5--基础骨架以及标题、段落、图片标签的使用
  • 探索反向传播:深度学习中优化神经网络的秘密武器
  • K8S精进之路-控制器DaemonSet -(3)
  • 【JVM】类加载机制
  • ENV | 5步安装 npm node(homebrew 简洁版)
  • EasyExcel全面实战:掌握多样化的Excel导出能力
  • 基于springcloud的药品销售系统
  • 基于组网分割的超大规模设计 FPGA 原型验证解决方案
  • C# 面向对象基础,简单的银行存钱取钱程序
  • 【Rockchip系列】官方函数:drm_buf_alloc
  • 深度学习--------------------------------门控循环单元GRU
  • 【实战】| X小程序任意用户登录
  • 计算机毕业设计之:云中e百货微信小程序设计与实现(源码+文档+定制)
  • CEX上币趋势分析:Infra赛道与Ton生态的未来
  • 数组基础(c++)
  • 第十三届蓝桥杯真题Python c组A.排列字母(持续更新)