要实现nginx与后端服务器间的加密连接,核心是配置proxy_pass使用https://协议,并启用proxy_ssl_verify、proxy_ssl_trusted_certificate等指令验证上游证书;若需双向认证,还需配置proxy_ssl_certificate及proxy_ssl_certificate_key。

要实现 Nginx 与后端服务器之间的加密连接,核心是让 Nginx 作为反向代理时,通过 HTTPS(而非 HTTP)与上游服务通信,并验证上游证书的真实性。这能防止内网流量被窃听或篡改,尤其在多租户、混合云或合规要求高的场景中非常关键。
配置 Nginx 使用 HTTPS 连接上游
Nginx 默认用 HTTP 代理,需显式启用 HTTPS 上游协议。关键在于 upstream 块中使用 https:// 协议前缀,并确保 Nginx 编译时启用了 HTTPS 支持(主流发行版默认已启用)。
示例配置:
upstream backend {server https://10.0.1.5:8443;
}
注意:Nginx 1.19.5+ 支持直接在 upstream 中写 https URL;旧版本需配合 proxy_ssl_* 指令 + http:// 地址,但推荐升级以简化配置。
启用并验证上游 TLS 证书
仅发 HTTPS 请求不够,还需验证后端证书是否可信,否则存在中间人风险。Nginx 提供以下关键指令:
- proxy_ssl_verify on; —— 启用证书校验(默认 off)
- proxy_ssl_trusted_certificate /path/to/ca-bundle.crt; —— 指定信任的 CA 根证书(如后端自签名,则填其私有 CA 证书)
- proxy_ssl_verify_depth 2; —— 设置证书链验证深度(按实际证书层级调整)
- proxy_ssl_name "backend.example.com"; —— 指定期望的 SNI 名称和证书 subjectAltName,防止域名不匹配
若后端使用自签名证书,必须将签发该证书的 CA 公钥加入 proxy_ssl_trusted_certificate,否则校验失败导致 502。
可选:客户端证书认证(双向 TLS)
如后端要求 Nginx 也提供身份凭证(mTLS),需额外配置:
- proxy_ssl_certificate /path/to/nginx-client.crt; —— Nginx 发送给后端的证书
- proxy_ssl_certificate_key /path/to/nginx-client.key; —— 对应私钥(建议设权限为 600)
- proxy_ssl_password_file /path/to/passphrase.txt; —— 若私钥受密码保护,可通过此文件传入(每行一个密码)
此时后端需配置信任 Nginx 客户端证书的 CA,并开启客户端证书校验(如 Nginx 后端可用 ssl_client_certificate 和 ssl_verify_client on;)。
调试与验证技巧
配置后常见问题包括连接拒绝、证书错误或 502。可结合以下方式快速定位:
- 用
openssl s_client -connect 10.0.1.5:8443 -servername backend.example.com手动测试上游 HTTPS 可达性及证书有效性 - 在 Nginx 配置中临时添加
error_log /var/log/nginx/debug.log debug;,查看 SSL 握手细节(注意日志量大,调试后关闭) - 检查 Nginx 错误日志中是否出现
SSL_do_handshake() failed、unable to get local issuer certificate等提示,对应修复证书路径或信任链 - 确认后端服务监听的是 TLS 端口(如 8443),且未仅监听 HTTP(如 8080)
不复杂但容易忽略。











