推荐答案
-- -------------------- ---- ------- ---- - --- ------------- ------------------- - ------- -------- -- ------ - ------ - ------ --- ----------- ------------ -------- ---- - ---------- ---------------------- ------------------ ---- ---------------- ------- -------------- ---------------- ---------- -------------------- ---------------- ---- ------ ---------------- --------- ------------- ---------------- --------------- --------------------------- ---------------- ----------------- -------- - - -
本题详细解读
1. WebSocket 代理的基本原理
WebSocket 是一种全双工通信协议,允许客户端和服务器之间进行实时通信。Nginx 作为反向代理服务器,可以通过配置将 WebSocket 请求转发到后端服务器。
2. 配置关键点
proxy_http_version 1.1
: WebSocket 协议基于 HTTP/1.1,因此需要将代理的 HTTP 版本设置为 1.1。proxy_set_header Upgrade $http_upgrade
: 设置Upgrade
头为$http_upgrade
,用于指示协议升级为 WebSocket。proxy_set_header Connection $connection_upgrade
: 设置Connection
头为$connection_upgrade
,用于保持连接。map $http_upgrade $connection_upgrade
: 这个映射用于根据$http_upgrade
的值动态设置$connection_upgrade
。如果$http_upgrade
为空,则关闭连接。
3. 其他常用配置
proxy_set_header Host $host
: 设置Host
头为原始请求的Host
。proxy_set_header X-Real-IP $remote_addr
: 设置X-Real-IP
头为客户端 IP 地址。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
: 设置X-Forwarded-For
头,用于记录客户端的原始 IP 地址。proxy_set_header X-Forwarded-Proto $scheme
: 设置X-Forwarded-Proto
头,用于记录原始请求的协议(HTTP 或 HTTPS)。
4. 示例配置解释
location /ws/
: 匹配所有以/ws/
开头的请求路径。proxy_pass http://backend_server
: 将请求转发到后端服务器backend_server
。
通过以上配置,Nginx 可以正确代理 WebSocket 请求,并保持与客户端和后端服务器的实时通信。