Chronograf是InfluxData官方推出的可视化工具,通常和InfluxDB、Telegraf、Kapacitor一起组成TICK技术栈。在实际部署中,Chronograf默认监听127.0.0.1:8888,不少运维同学图省事直接把它改成0.0.0.0对外提供服务,这样做的风险很大:流量明文传输、没有统一认证、端口管理混乱。更合理的做法是让Chronograf只监听本机,前面架一层Nginx做反向代理,由Nginx统一负责入口、加密和访问控制。

一、整体架构与Chronograf的基础配置
先明确目标架构:客户端通过HTTPS访问Nginx监听的443端口,Nginx将请求转发给运行在同一台机器(或内网其他机器)上的Chronograf服务,Chronograf再从InfluxDB读取数据渲染图表。这样Chronograf完全不需要暴露公网端口,所有安全策略都集中在Nginx这一层配置,后期维护成本也低。
第一步是调整Chronograf自身的监听地址。编辑其启动参数或systemd服务文件,确保它只绑定在本机回环地址上,避免绕过Nginx被直接访问:
# 修改 /etc/default/chronograf 或 systemd 的 Environment 配置 # 让 Chronograf 只监听本机回环地址 INFLUXD_BIND_ADDRESS=127.0.0.1:8888 # 如果使用命令行直接启动 chronograf --host 127.0.0.1 --port 8888
配置完成后重启服务,用ss -tlnp | grep 8888确认监听地址已经是127.0.0.1而不是0.0.0.0。这一步非常关键,很多所谓的安全加固都败在服务本身仍然可以直接访问上,等于给攻击者留了后门。
二、Nginx反向代理的核心配置
接下来是本文的重点:编写Nginx的server块。Chronograf是一个前后端一体的Web应用,页面中大量使用了长连接和实时刷新,因此除了最基本的proxy_pass,还必须正确处理WebSocket升级和头部透传,否则会出现页面能打开但仪表盘数据不刷新、控制台报错等问题。
下面是一份可以直接使用的完整配置,放在/etc/nginx/conf.d/chronograf.conf中:
server {
listen 80;
server_name monitor.ippipp.com;
# 后续配置TLS后可将80端口的请求全部跳转到https
location / {
proxy_pass http://127.0.0.1:8888;
proxy_http_version 1.1;
# WebSocket 支持,Chronograf 的实时功能依赖 Upgrade 头
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 透传客户端真实信息,Chronograf 日志中才能看到真实来源
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_read_timeout 300s;
proxy_send_timeout 300s;
proxy_connect_timeout 60s;
# 对JSON和静态资源开启压缩,减少图表数据传输量
gzip on;
gzip_types application/json text/css application/javascript;
gzip_min_length 1024;
}
}几个细节值得展开说明。第一,proxy_http_version 1.1必须显式声明,因为Nginx默认使用HTTP/1.0与上游通信,而WebSocket升级要求1.1版本。第二,Connection头如果写成固定值keep-alive,在浏览器发起WebSocket请求时握手会失败,写成upgrade才能兼容两种场景。第三,超时时间默认只有60秒,当你在Chronograf里执行跨度较长的时间范围查询时,很容易触发504超时,把它放大到300秒是实践中比较稳妥的经验值。
配置完成后执行nginx -t检查语法,再执行nginx -s reload平滑加载,浏览器访问域名应该就能看到Chronograf的登录界面了。
三、安全加固:TLS、认证与访问控制
反向代理跑通只是第一步,监控面板里往往包含服务器IP、业务指标等敏感信息,必须加上多层防护。首先是TLS加密,可以用Let's Encrypt签发免费证书,也可以使用企业内部证书:
server {
listen 443 ssl;
server_name monitor.ippipp.com;
ssl_certificate /etc/nginx/ssl/monitor.ippipp.com.pem;
ssl_certificate_key /etc/nginx/ssl/monitor.ippipp.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Basic Auth 认证,多一层口令保护
auth_basic "Restricted Monitor";
auth_basic_user_file /etc/nginx/.htpasswd;
# IP 白名单,只允许办公网段访问
# allow 192.168.1.0/24;
# allow 10.0.0.0/8;
# deny all;
location / {
proxy_pass http://127.0.0.1:8888;
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_read_timeout 300s;
}
}Basic Auth的密码文件用htpasswd工具生成:执行htpasswd -c /etc/nginx/.htpasswd admin,按提示输入两次密码即可。需要注意,Basic Auth和Chronograf自身的账号体系是叠加关系,用户需要先过Nginx这一关,再登录Chronograf,双保险的模式适合安全要求较高的环境。如果你的团队规模较大,也可以把Basic Auth换成对接LDAP或OAuth的方案,思路一致,只是认证模块不同。
另外提醒一点:Chronograf自身支持--use-auth-verification与OAuth集成的登录方式,如果已经启用了它的内置认证,Nginx层的Basic Auth可以酌情省略,避免用户重复输入两套口令造成体验割裂。安全强度和易用性之间的平衡,要根据自己的实际情况来取舍。
四、常见问题排查思路
部署完成后如果访问异常,可以按下面的顺序定位。出现502 Bad Gateway,说明Nginx连不上上游,先用curl http://127.0.0.1:8888在本机验证Chronograf是否存活,再检查selinux是否阻止了Nginx发起网络连接(CentOS上常见的坑,执行setsebool -P httpd_can_network_connect 1解决)。
页面能打开但仪表盘一直空白或转圈,大概率是WebSocket转发没配置正确,重点检查Upgrade和Connection这两个头是否遗漏。图表加载慢,可以看看Nginx的error.log里有没有upstream timed out记录,有的话继续放大proxy_read_timeout,同时确认InfluxDB本身的查询性能不是瓶颈,毕竟代理层只能缓解不能根治慢查询。
还有一个容易被忽略的问题是时间范围查询携带的URL过长,某些环境下会触发Nginx的请求头大小限制,日志中表现为400错误,可以在server块中加上large_client_header_buffers 4 32k;来规避。把这几个排查点记熟,绝大多数部署问题都能在几分钟内定位解决。
Nginx反向代理ChronografInfluxDB监控修改时间:2026-09-08 09:45:10