千家信息网

如何在nginx中反向代理webSocket

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章为大家展示了如何在nginx中反向代理webSocket,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。GET /chat HTTP/1.1Host:
千家信息网最后更新 2025年12月02日如何在nginx中反向代理webSocket

本篇文章为大家展示了如何在nginx中反向代理webSocket,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

GET /chat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 13Origin: http://example.com

熟悉HTTP的童鞋可能发现了,这段类似HTTP协议的握手请求中,只是多了几个东西。

Upgrade: websocketConnection: Upgrade这个就是Websocket的核心了,告诉Apache、Nginx等服务器:我发起的是Websocket协议。Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 13

首先,Sec-WebSocket-Key 是一个Base64 encode的值,这个是浏览器随机生成的,告诉服务器:泥煤,不要忽悠窝,我要验证尼是不是真的是Websocket助理。

最后,Sec-WebSocket-Version 是告诉服务器所使用的Websocket Draft(协议版本),在最初的时候,Websocket协议还在 Draft 阶段,各种奇奇怪怪的协议都有,而且还有很多期奇奇怪怪不同的东西,什么Firefox和Chrome用的不是一个版本之类的,当初Websocket协议太多可是一个大难题。。不过现在还好,已经定下来啦 大家都使用的一个东西

然后服务器会返回下列东西,表示已经接受到请求, 成功建立Websocket啦!

HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=Sec-WebSocket-Protocol: chat

这里开始就是HTTP最后负责的区域了,告诉客户,我已经成功切换协议啦~

Upgrade: websocketConnection: Upgrade

依然是固定的,告诉客户端即将升级的是Websocket协议。至此,HTTP已经完成它所有工作了,接下来就是完全按照Websocket协议进行了。

明白协议的原理了就可以下一步了

首先nginx先配置好https的证书

服务器的证书是老大配置好的,我就直接用了。需要的自己查一下吧0.0

在nginx配置文件的 service 节点中添加如下配置

location /wss    {         proxy_pass http://127.0.0.1:8888;         proxy_http_version 1.1;         proxy_set_header Upgrade $http_upgrade;         proxy_set_header Connection "Upgrade";        proxy_set_header X-Real-IP $remote_addr;     }

解释一下参数

/wss 这个是随便起的,告诉Nginx要代理的url,现在我的设置为 wss ,当我访问的我的服务器 https://abc.com/wss 时,Nginx会把我的请求映射到本机的8888端口。

proxy_pass 要代理到的url,我的代理到本机的8888端口。

proxy_http_version 代理时使用的 http版本。

重点来了:

代理webSocket的关键参数

proxy_set_header Upgrade 把代理时http请求头的 Upgrade 设置为原来http请求的请求头,wss协议的请求头为 websocket
proxy_set_header Connection 因为代理的wss协议,所以http请求头的 Connection 设置为 Upgrade

proxy_set_header X-Real-IP 给代理设置原http请求的ip,填写 $remote_addr 即可

至于websocket协议的response的参数,在反向代理的时候不用管。

到这里,Nginx反向代理webSocket的配置就完成了,重启Nginx,用websocket连接试试,在原来wss地址的地方填写 wss://abc.com/wss 。如果websocket成功连接,说明Nginx反向代理websocket已经成功了。

总结

现在的配置只是反向代理到本机时的配置,如果要反向代理到别的主机,在代理时可能会跨域问题,需要在Nginx的反向代理中做跨域的配置。

思考

在Nginx的配置文件中能看到这一段

location ~ .php$ {   root html;   fastcgi_pass 127.0.0.1:9000;   fastcgi_index index.php;   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;   include fastcgi_params;}

这是Nginx中php的配置文件,我擦,怎么这么眼熟,这个配置清单跟刚才的websocket的反向代理这么像。通过上网查资料才知道,原来Nginx在处理php类型的请求时,把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx,而php-fpm是一个PHP FastCGI管理器,nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。所以说Nginx在处理php类型的请求时,本质上也是通过反向代理功能实现的。

我们可以把思维展开,用Nginx反向代理可以实现更多的功能,比如代理Tomcat

location /Tomcat    {         proxy_pass http://127.0.0.1:8080;         proxy_http_version 1.1;        proxy_set_header X-Real-IP $remote_addr;     }

上述内容就是如何在nginx中反向代理webSocket,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

代理 配置 服务器 服务 处理 成功 东西 就是 参数 只是 客户 文件 版本 进程 本机 管理 内容 功能 客户端 技能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 安徽软件开发者价位 图书借阅管理系统数据库要求 小学网络安全组织机构 警察网络安全绘画简单 javafx连本地数据库 联想服务器主板结构 软件开发需求概设和详设 智慧食堂整体解决方案软件开发 软件开发方法学 需求 网络安全意识论文查重率30% 服务器全局找某个zip文件 冷水江软件开发技工学校 重邮网络安全的老师 软件开发模型什么意思 用华为手机能保证网络安全吗 4个企业数据库安全最佳做法 计算机网络技术专业的就业职位 服务器维修网 韩国服务器租用攻略 南京苹果手机软件开发要多少钱 买卖货币帮助网络安全法 数据库安全保护思维导图 终端僵尸网络技术 高质量完善的语音会议软件开发 剑灵捏脸美女数据库 荆州移动网络技术员工资 开机不自动显示服务器管理器 哈工程网络安全就业 网络安全最关心的三个属性 国内外大型网络安全事件案例
0