在现代Web开发中,WebSocket 是实现客户端与服务器之间实时双向通信的重要技术。而 Nginx 作为高性能的Web服务器和反向代理,广泛用于部署网站和应用。如果你使用 Nginx 虚拟主机(即基于域名或端口区分多个站点)来托管你的 Web 应用,并希望支持 WebSocket 连接,那么本教程将手把手教你如何正确配置。
Nginx虚拟主机 允许你在一台服务器上运行多个网站或应用,每个站点通过不同的域名(如 site1.example.com 和 site2.example.com)或端口进行区分。这种机制非常适合资源有限但需要托管多个项目的场景。
WebSocket 连接在建立时会先发起一个 HTTP 请求,然后通过 Upgrade 头升级为 WebSocket 协议。然而,Nginx 默认不会将这些升级请求正确转发给后端服务,导致 WebSocket 连接失败(通常表现为 400 或 502 错误)。因此,我们需要在 Nginx 配置中显式地处理这些头部信息。
在配置 Nginx 之前,请确认你的后端应用(如 Node.js、Python Flask、Java Spring 等)已经正确实现了 WebSocket 服务,并能在本地直接访问(例如通过 ws://localhost:3000)。
假设你有一个域名 websocket.example.com,对应的 Nginx 配置文件通常位于 /etc/nginx/sites-available/websocket.example.com。打开该文件并添加以下关键指令:
server { listen 80; server_name websocket.example.com; location / { proxy_pass http://127.0.0.1:3000; # 替换为你的后端地址 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }} 关键说明:
proxy_http_version 1.1;:WebSocket 需要 HTTP/1.1 支持。proxy_set_header Upgrade $http_upgrade; 和 proxy_set_header Connection "upgrade";:这两行是让 Nginx 正确转发 WebSocket 升级请求的核心。保存配置文件后,先检查语法是否正确:
sudo nginx -t
如果显示 syntax is ok,则重载 Nginx 使配置生效:
sudo systemctl reload nginx
在你的网页 JavaScript 中尝试连接:
const ws = new WebSocket('ws://websocket.example.com');ws.onopen = () => console.log('WebSocket connected!');ws.onmessage = (event) => console.log('Received:', event.data); 如果控制台输出 “WebSocket connected!”,恭喜你!配置成功。
Upgrade 和 Connection 头部。wss://,并在 Nginx 中配置 SSL 证书,同时保留上述 WebSocket 代理设置。通过本文,你已经学会了如何在 Nginx虚拟主机 中正确配置 WebSocket支持。只需在 location 块中添加几行关键的代理头部,即可让 WebSocket 流量顺利穿透 Nginx 到达后端服务。这项技能对于构建聊天应用、实时通知系统或在线协作工具至关重要。
记住,无论你是使用 Nginx反向代理 还是直接部署,只要涉及 WebSocket,都必须处理好协议升级过程。希望这篇教程能帮助你轻松搞定 WebSocket配置!
本文由主机测评网于2025-11-30发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025111319.html