正文
如果域名配置了证书, 通过nginx代理, 那websocket就不能用ws, 控制台会报错: The page at '***' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws
所以配置如下.
- 修改ws, 改为wss,
wss://你的域名/wss
- 修改nginx:
location /wss {
proxy_pass http://ws的原地址ip:端口号/;
proxy_connect_timeout 4s;
proxy_read_timeout 7200s;
proxy_send_timeout 12s;
# proxy_http_version 1.1; 很多博客都有这个配置, 可以先不配
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
- 重启nginx
遇到问题
404问题
- location后面不要加斜杠. 比如:
location /wss/
, 虽然这样不会再报404, 但是会报301 - 前端的配置中, ws地址不要有斜杆后缀, 如
wss://xxx.xx/ws/
, 和location保持一致 - proxy_pass看情况. 如果ws服务器的接口地址, 就是ip:port/ , 那proxy_pass也是一样,
http://ip:port/
有后缀斜杠. 如果是其他的, 如 ip:port/aa.do, 则proxy_pass也是这个
301问题
基本就是上面的1点造成的