翼度科技»论坛 云主机 服务器技术 查看内容

docker环境中websocket 通过nginx代理不通解决方案

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
如果你在 Docker 环境中使用 WebSocket 并通过 Nginx 进行代理,可能需要进行一些额外的配置才能使 WebSocket 正常工作。
下面是一些可能会导致 WebSocket 代理失败的问题以及相应的解决方法:

  • 检查 Nginx 配置 
在 Nginx 配置中,确保已经正确地设置了
  1. proxy_pass
复制代码
  1. proxy_http_version
复制代码
,如下所示:
  1. location /ws/ {
  2.   proxy_pass http://backend/;
  3.   proxy_http_version 1.1;
  4.   proxy_set_header Upgrade $http_upgrade;
  5.   proxy_set_header Connection "Upgrade";
  6. }
复制代码
其中,
  1. proxy_pass
复制代码
指向后端 WebSocket 服务器的地址,
  1. proxy_http_version
复制代码
设置为 1.1(WebSocket 要求使用 HTTP/1.1),并且
  1. Upgrade
复制代码
  1. Connection
复制代码
标头设置为
  1. Upgrade
复制代码
,这是为了使 Nginx 识别 WebSocket 连接。

  • 检查 WebSocket 后端服务器配置
在 WebSocket 后端服务器上,确保已经正确地设置了
  1. WebSocket
复制代码
握手,如下所示:
  1. const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', function connection(ws) { console.log('Client connected'); });
复制代码
这是一个简单的 WebSocket 后端服务器配置,可以监听在
  1. 8080
复制代码
端口,并在每个连接上打印一条消息。

  • 检查 Docker 网络配置
在 Docker 网络配置中,确保已经正确地设置了端口映射和网络模式,如下所示:
  1. docker run -p 80:80 -p 8080:8080 --net my-network my-image
复制代码
其中,
  1. -p
复制代码
参数用于将 Docker 容器中的端口映射到宿主机上,
  1. --net
复制代码
参数用于指定容器连接的网络。

  • 检查防火墙设置
在 Docker 容器中,确保已经正确地设置了防火墙规则,如下所示:
  1. iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
复制代码
这些规则将允许来自外部网络的 TCP 流量通过端口
  1. 80
复制代码
  1. 8080
复制代码

如果以上步骤都已经完成,但是 WebSocket 仍然无法正常工作,可以尝试使用工具进行调试,如
  1. wscat
复制代码
  1. websocketd
复制代码
  1. websocat
复制代码
等。这些工具可以帮助你诊断 WebSocket 连接的问题,并找到相应的解决方法。
到此这篇关于docker环境中websocket 通过nginx代理不通解决方案的文章就介绍到这了,更多相关docker websocket 通过nginx代理不通内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/article/283773.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具