需在 nginx 中配置 websocket 透传:设置 proxy_http_version 1.1、upgrade 和 connection 头、延长超时时间,并确保 https/wss 场景下协议头与 root_url 一致,最后通过 curl 和浏览器 network 验证 101 响应。

要解决 Grafana 因 Nginx 反向代理缺失 WebSocket 支持而导致监控看板无法实时刷新的问题,核心在于让 Nginx 正确透传并维持 WebSocket 协议升级流程。Grafana 从 v8.0 起默认启用 WebSocket 用于数据流推送(如变量自动更新、告警状态同步、部分插件实时面板),若代理层不支持,就会退化为低效轮询,甚至完全中断更新。
确认 Grafana 是否启用了 WebSocket
Grafana 默认开启 WebSocket,但可通过配置显式控制:
- 检查 conf/defaults.ini 或环境变量中 allow_embedding = true 和 live_enabled = true(v9+ 版本)
- 浏览器开发者工具 → Network 面板,筛选 ws:// 或 wss:// 请求,观察是否发起、是否返回 101 Switching Protocols
- 若只看到大量 /api/live/... 的 HTTP 200 请求或 400/502 错误,则基本可判定是代理层阻断了升级握手
Nginx 必须添加的 WebSocket 代理配置
在对应 Grafana 后端服务的 location 块中(例如 / 或 /grafana/),补充以下关键指令:
- proxy_http_version 1.1; —— 强制使用 HTTP/1.1,WebSocket 升级依赖此版本
-
proxy_set_header Upgrade $http_upgrade; —— 将客户端的
Upgrade: websocket头原样转发 - proxy_set_header Connection "upgrade"; —— 注意双引号包裹,Nginx 会将其作为字面量而非变量处理
- proxy_read_timeout 86400; 和 proxy_send_timeout 86400; —— 防止空闲连接被默认 60 秒超时关闭
- 建议同时关闭缓冲与缓存:proxy_buffering off;、proxy_cache off;、proxy_redirect off;
HTTPS/WSS 场景下的特别注意事项
若前端访问的是 https://your-domain.com/grafana,Grafana 内部生成的 WebSocket URL 会是 wss://,此时必须确保:
- Nginx 的 server 块已启用 SSL(listen 443 ssl),且证书有效
- X-Forwarded-Proto $scheme 已设置,否则 Grafana 可能误判协议,拒绝 wss 升级
- 后端 Grafana 配置中设置 root_url = https://your-domain.com/grafana/,并启用 serve_from_sub_path = true
- Nginx 不对该路径返回 301/302 重定向或 404;不要在该 location 下配置
return 404或deny all
验证与排障要点
配置完成后 reload Nginx,立即验证:
- 用 curl 模拟握手:
curl -i -N -H "Connection: upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" https://your-domain.com/grafana/api/live/ws,应返回HTTP/1.1 101 - 浏览器 Network 中查看 ws 请求的 Request Headers:必须含
Upgrade: websocket和Connection: upgrade - 检查 Nginx error.log,排除
upstream prematurely closed connection或client sent invalid upgrade header类报错 - 若仍不稳定,可在 upstream 中添加 keepalive 32; 并在 proxy_pass 前加 proxy_http_version 1.1; 显式声明
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











