开启mTLS的Nginx如何通过nginx-prometheus-exporter采集指标?
解决nginx-prometheus-exporter访问开启mTLS的Nginx /metrics端点问题
方案1:通过exporter自带参数指定客户端证书
nginx-prometheus-exporter提供了专门的TLS客户端参数,启动时直接指定对应的证书文件即可携带证书访问开启mTLS的Nginx端点:
- 核心参数说明:
--nginx.ssl-cert:客户端证书文件路径--nginx.ssl-key:客户端私钥文件路径--nginx.ssl-ca:用于验证Nginx服务端证书的CA根证书路径
以Docker部署exporter为例,启动命令如下:
docker run -d \ -v /宿主机路径/client.crt:/etc/exporter/client.crt \ -v /宿主机路径/client.key:/etc/exporter/client.key \ -v /宿主机路径/root-ca.pem:/etc/exporter/root-ca.pem \ quay.io/prometheuscommunity/nginx-prometheus-exporter:latest \ --nginx.scrape-uri=https://<Nginx容器IP>:8081/metrics \ --nginx.ssl-cert=/etc/exporter/client.crt \ --nginx.ssl-key=/etc/exporter/client.key \ --nginx.ssl-ca=/etc/exporter/root-ca.pem
注意:客户端证书必须被Nginx配置中
ssl_client_certificate指定的bundle.pem信任,否则仍会返回400错误。
方案2:优化Nginx配置(可选,提升灵活性)
如果需要对/metrics端点做更精细的控制(比如限制特定客户端证书访问),可以修改Nginx配置,单独对该路径做规则调整:
server { listen 8081 ssl; ssl_certificate /etc/nginx/certs/tls.crt; ssl_certificate_key /etc/nginx/certs/tls.key; ssl_client_certificate /etc/nginx/root-ca/bundle.pem; # 全局开启mTLS验证 ssl_verify_client on; # 针对/metrics路径的特殊配置 location /metrics { # 可选:限制仅特定CN的客户端证书访问 # if ($ssl_client_s_dn !~ "/CN=nginx-exporter-client") { # return 403; # } # 保持mTLS验证,确保exporter携带合法证书 proxy_pass http://localhost:8080; # 根据实际metrics来源调整,比如stub_status或其他模块 } # 其他业务路径保持原有mTLS规则 location / { # 你的业务配置代码 } }
验证配置有效性
先通过curl手动验证证书访问是否正常,排除证书本身的问题:
curl --cert /路径/client.crt --key /路径/client.key --cacert /路径/root-ca.pem https://<NginxIP>:8081/metrics
如果能正常获取metrics内容,再启动exporter即可正常采集指标。
内容的提问来源于stack exchange,提问作者Hare Krshn
相关产品推荐
相关产品推荐

