You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 12:16:05