当前位置:首页 > 服务器技术 > 正文

Nginx虚拟主机配置WebSocket(从零开始搭建支持WebSocket的Nginx虚拟主机)

在现代Web开发中,WebSocket 是实现客户端与服务器之间实时双向通信的重要技术。而 Nginx 作为高性能的Web服务器和反向代理,广泛用于部署网站和应用。如果你使用 Nginx 虚拟主机(即基于域名或端口区分多个站点)来托管你的 Web 应用,并希望支持 WebSocket 连接,那么本教程将手把手教你如何正确配置。

Nginx虚拟主机配置WebSocket(从零开始搭建支持WebSocket的Nginx虚拟主机) Nginx虚拟主机 WebSocket配置 Nginx反向代理 WebSocket支持 第1张

什么是Nginx虚拟主机?

Nginx虚拟主机 允许你在一台服务器上运行多个网站或应用,每个站点通过不同的域名(如 site1.example.comsite2.example.com)或端口进行区分。这种机制非常适合资源有限但需要托管多个项目的场景。

为什么WebSocket需要特殊配置?

WebSocket 连接在建立时会先发起一个 HTTP 请求,然后通过 Upgrade 头升级为 WebSocket 协议。然而,Nginx 默认不会将这些升级请求正确转发给后端服务,导致 WebSocket 连接失败(通常表现为 400 或 502 错误)。因此,我们需要在 Nginx 配置中显式地处理这些头部信息。

配置步骤详解

第1步:确保后端服务已启用WebSocket

在配置 Nginx 之前,请确认你的后端应用(如 Node.js、Python Flask、Java Spring 等)已经正确实现了 WebSocket 服务,并能在本地直接访问(例如通过 ws://localhost:3000)。

第2步:编辑Nginx虚拟主机配置文件

假设你有一个域名 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 升级请求的核心。
  • 其他头部用于传递客户端真实信息,便于后端日志记录和安全验证。

第3步:测试并重载Nginx

保存配置文件后,先检查语法是否正确:

sudo nginx -t

如果显示 syntax is ok,则重载 Nginx 使配置生效:

sudo systemctl reload nginx

第4步:前端连接测试

在你的网页 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!”,恭喜你!配置成功。

常见问题排查

  • 连接被拒绝:检查后端服务是否正在运行,端口是否开放。
  • 400 Bad Request:通常是缺少 UpgradeConnection 头部。
  • HTTPS下无法连接:若使用 HTTPS,前端应使用 wss://,并在 Nginx 中配置 SSL 证书,同时保留上述 WebSocket 代理设置。

总结

通过本文,你已经学会了如何在 Nginx虚拟主机 中正确配置 WebSocket支持。只需在 location 块中添加几行关键的代理头部,即可让 WebSocket 流量顺利穿透 Nginx 到达后端服务。这项技能对于构建聊天应用、实时通知系统或在线协作工具至关重要。

记住,无论你是使用 Nginx反向代理 还是直接部署,只要涉及 WebSocket,都必须处理好协议升级过程。希望这篇教程能帮助你轻松搞定 WebSocket配置