背景简介
前端使用 WebSocket 连接访问时报错,需配置允许 WebSocket 连接代理。
环境配置
- 系统:Debian 6.1.66-1 (2023-12-09) x86_64 GNU/Linux
详细步骤
报错信息样例
manager.js:75 WebSocket connection to 'wss://your_domain/c11n-messaging/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSU5YHLtEsqnQmYH2pxKfSYgoUe-YrCSk2-ziPZdk-ThpdYiidU3L1V8AjZFU5qf8QvArXLD3HSBeQbFujJdS2ApunDfQ' failed:
第一步: 修改 nginx 配置,使其支持 WebSocket 连接
server {
server_name your_domain;
location / {
proxy_pass http://127.0.0.1:30032;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# 如果需要,可以添加更多的代理设置
******
}
listen 443 ssl;
******
}
server {
if ($host = your_domain) {
return 301 https://$host$request_uri;
}
server_name your_domain;
listen 80;
return 404;
}
proxy_http_version 1.1;
:指定代理使用 HTTP/1.1 版本。WebSocket 连接需要 HTTP/1.1 或更高版本,因为它依赖于一些特定的 HTTP/1.1 功能,如持久连接。proxy_set_header Upgrade $http_upgrade;
:告诉代理服务器,客户端想要升级连接到 WebSocket 协议。变量 $http_upgrade 会被设置为客户端请求中的 Upgrade 头部的值,通常是 “websocket”。proxy_set_header Connection "upgrade";
:这个头部告诉代理服务器,客户端想要改变协议,从 HTTP 升级到 WebSocket。
这三个配置共同作用,使得 Nginx 能够正确地处理 WebSocket 请求的 HTTP 升级握手,从而建立 WebSocket 连接。
第二步: 重启 Nginx 服务
- 查看配置是否正确
root@frp-server:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
- 重启
root@frp-server:~# systemctl restart nginx
以上便是本文的全部内容,感谢您的阅读。