ws访问正常,现在做小程序,需要 wss,按照文档中第二种方法,修改 nginx 代理,结果一直报错。
nginx 中 conf的配置如下 :
server {
listen 443;
server_name api.***.city;
ssl on;
ssl_certificate /etc/nginx/conf.d/wss/scs166028******_api.***.city_server.crt;
ssl_certificate_key /etc/nginx/conf.d/wss/scs166028******_api.***.city_server.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
location /wss
{
proxy_pass http://127.0.0.1:8282;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite /wss/(.*) /$1 break;
proxy_redirect off;
}
}
前端访问:
uni.connectSocket({
url: "wss://api.***.city/wss", //加不加端口号都无效,域名后加不加 wss 也无效
success: (res) => {
console.log('连接成功了!')
},
fail: (res) => {
console.log('连接失败信息:' + res.data)
// reconnect();
}
})
报以下错误:
WebSocket connection to 'wss://api.***.city/wss' failed: Error during WebSocket handshake: Unexpected response code: 404
WebSocket connection to 'wss://api.***.city:8282/wss' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR
WebSocket connection to 'wss://api.***.city:8282/' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR
WebSocket connection to 'wss://api.***.city/' failed: Error during WebSocket handshake: Unexpected response code: 200
百度了很多答案,都试过了,无效。
查询云服务器,安全组显示443,8282这些端口均已放行。
rewrite /wss/(.*) /$1 break;
好像多余谢谢评论。已经去掉这两行多余的代码,重启后仍然不能通过 wss 连接
改完nginx配置要重启nginx才能生效,
这2个配置手册没有,感觉多余。
地址用
wss://api.***.city/wss
是正确的谢谢评论。每次修改完 nginx 配置,都会先检查语法再重启。删掉那两行多余的配置,也是一样的结果,还是报异常
是不是使用了cdn啊
谢谢评论,已经完全按照这个改过了,重启后仍然报错:
不加端口访问,报404错误:
觉得你有点懵,什么加不加端口的。
wss://就不需要端口了,默认走的是443,再转发到8282。
要么:ws://api..city:8282 (可Ip+端口 或 域名+端口)
要么:wss://api..city:/wss/(只可域名,通过路径/wss/转发)
此外,结尾的:/wss 与 /wss/ 好像有区别的,把后面的/加上试试:wss://api.***.city/wss/
和nginx里面的配置有关。
我的配置类似:
location /wss/
{
}
那连接的时候就用:wss://api..city/wss/
网上其他教程没有/结尾
location /wss
{
}
那连接的时候就用:wss://api..city:/wss
而且这个地址可以直接使用浏览器打开的: https://api.***.city/wss/
感谢。wss 后面加一斜杠,现在确实可以连接上了。谢谢~
完整的 nginx 配置如下:
感谢分享,收藏了。
location /wss/{
proxy_pass http://127.0.0.1:8282;
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://www.xxx.com/wss/
这个完全OK
nginx大于1.10
确实……