Ubuntu 20.04下Nginx Prometheus exporter启动报connection refused错误
故障原因
- 本地域名解析与Nginx监听规则不匹配:服务器
/etc/hosts文件中通常会将自身域名映射到127.0.1.1这类回环地址,但你的Nginx仅监听了公网IP的443端口,未监听回环地址的443端口,本地发起的请求直接打到回环地址的443端口时被拒绝。而你手动访问是从外部网络发起,域名解析到公网IP,因此可以正常打开页面。 - systemd启动时机过早:你当前配置的
After=network.target仅代表系统网络栈初始化完成,此时可能网卡还未完全拿到IP、本地解析规则还未加载,导致服务启动时解析异常。 - 安全模块限制:系统内置的AppArmor等安全模块可能限制了
nginx_exporter用户对本地443端口的访问权限,导致连接被拒。
解决方案
优先推荐第一种方案,改造成本最低且稳定性最高:
- 方案1:修改采集地址为本地非SSL路径
在Nginx配置中放开127.0.0.1对status页的访问权限,直接采集本地回环地址的status页,避免解析和SSL校验问题。修改systemd配置中的ExecStart参数如下:
修改完成后执行命令重启服务即可:ExecStart=/usr/local/bin/nginx-prometheus-exporter \ -web.listen-address=server_IP:9113 \ -nginx.scrape-uri http://127.0.0.1/nginx-statussystemctl daemon-reload && systemctl restart nginx_prometheus_exporter - 方案2:修复解析与监听规则
要么将/etc/hosts中domain.tld对应的解析地址修改为服务器的公网IP,要么在Nginx的443端口监听配置中新增127.0.0.1:443、127.0.1.1:443的监听规则,重启Nginx后再重启exporter服务。 - 方案3:调整systemd启动依赖
如果是启动时机异常导致的问题,修改Unit段的启动依赖,确保网络完全就绪后再启动服务:
重载配置重启服务后验证是否恢复。[Unit] Description=Nginx Prometheus Exporter After=network-online.target Wants=network-online.target - 方案4:排查安全模块权限
临时关闭AppArmor测试是否恢复:aa-teardown,如果确认是安全模块限制,为nginx_exporter用户放开本地443端口的访问权限即可。
内容的提问来源于stack exchange,提问作者Roberto Jobet
相关产品推荐
相关产品推荐

