困扰我三天的问题:使用uniapp开发一个即时聊天功能,前端是运行在微信小程序,域名都配置好了,使用nginx-1.24.0作代理,
代码如下:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
location /wss/ {
proxy_pass http://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-Real-IP $remote_addr;
}
阿里云 centos8.2 nginx 1.24 稳定版本
发布生产环境之后,使用wss可以访问到nginx,因为access.log中有记录
如下:
"GET /wss/im/eyJhbGdYraqNi0s_qdSuxVbPlOs HTTP/1.1" 302 0 "https://servicewechat.com/wx65433f6809b19dk2/devtools/page-frame.html" "wechatdevtools desktopapp appservice port/48912 token/4b477f0bd34cc80ef4a42242673c4a23 runtime/2"
小程序端报错
WebSocket connection to 'wss:/xxxx:7985/wss/im/eyJhbiOiJ0b2tlbklkIn0.NyoyMclPKuXdYraqNi0s_qdSuxVbPlOs' failed:
配置怎么更换都不起作用,不通过nginx代理直连可以成功访问后台,不会报错。
希望通过大家们帮忙解决掉这个问题,谢谢啦
根据你提供的信息,你遇到的问题是在使用uniapp开发微信小程序的即时聊天功能时,通过Nginx代理的WebSocket连接无法正常工作,但直连后台可以成功访问且不报错。
在这种情况下,有几个可能的原因和解决方法可以尝试:
确保Nginx配置正确:确保你在Nginx配置中正确设置了WebSocket代理。请确保以下配置项是否正确设置在你
的Nginx配置文件中的http块中:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
location /wss/ {
proxy_pass http://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-Real-IP $remote_addr;
}
此配置将请求转发到http://127.0.0.1:8080/,并在HTTP头部设置升级和连接升级。
检查后台服务器的WebSocket支持:确保您的后台服务器支持WebSocket协议。请确保后台服务器能够处理WebSocket连接请求并进行适当的处理。
检查防火墙和安全组设置:检查您的服务器防火墙和安全组设置,确保WebSocket流量被允许通过。确保服务器的端口7985是开放的,并允许与该端口的WebSocket连接。
检查证书配置:如果您的网站使用HTTPS,确保Nginx配置中正确配置了SSL证书,并且证书有效。
检查前端代码:确保您的前端代码正确设置了WebSocket连接地址,并且与Nginx代理的配置相匹配。
根据你提供的信息,出现错误的地方可能有两个方面:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
location /wss/ {
proxy_pass ws://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-Real-IP $remote_addr;
}
这里使用ws协议替代http协议,并将代理地址指向ws协议的地址。
wx.connectSocket({
url: "wss://xxxx:7985/wss/im/eyJhbiOiJ0b2tlbklkIn0.NyoyMclPKuXdYraqNi0s_qdSuxVbPlOs",
header: {
"content-type": "application/json",
"origin": "https://xxxx" // Nginx代理地址
},
success: function (res) {
console.log('websocket连接成功')
},
fail: function (res) {
console.log('websocket连接失败')
}
})
如果以上两个方法都无法解决问题,建议你查看后端日志,看看后端是否可以正常接收到WSS请求,排除后端服务异常的可能原因。
困扰我三天的问题:使用uniapp开发一个即时聊天功能,前端是运行在微信小程序,域名都配置好了,使用nginx-1.24.0作代理,
代码如下:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
location /wss/ {
proxy_pass http://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-Real-IP $remote_addr;
}
操作环境、软件版本等信息
阿里云 centos8.2 nginx 1.24 稳定版本
尝试过的解决方法
发布生产环境之后,使用wss可以访问到nginx,因为access.log中有记录
如下:
"GET /wss/im/eyJhbGdYraqNi0s_qdSuxVbPlOs HTTP/1.1" 302 0 "https://servicewechat.com/wx65433f6809b19dk2/devtools/page-frame.html" "wechatdevtools desktopapp appservice port/48912 token/4b477f0bd34cc80ef4a42242673c4a23 runtime/2"
小程序端报错
WebSocket connection to 'wss:/xxxx:7985/wss/im/eyJhbiOiJ0b2tlbklkIn0.NyoyMclPKuXdYraqNi0s_qdSuxVbPlOs' failed:
配置怎么更换都不起作用,不通过nginx代理直连可以成功访问后台,不会报错。
我想要达到的结果
问题出在nginx未能识别 URL ,导致无法访问,