Nginx反向代理配置:使用自签名SSL证书连接后端服务器
Nginx反向代理配置:使用自签名SSL证书连接后端服务器
嗨,看起来你已经搞定了前端的HTTPS跳转和基础反向代理配置,现在就差让Nginx信任后端的自签名SSL证书这一步了。别担心,这其实很简单,只需要在你的Nginx配置里添加几行和后端SSL验证相关的配置就行,这样既能保证通信安全,又能实现你只每年更新前端CA证书的目标。
问题核心
当前你的Nginx在反向代理到https://10.0.0.35时,会默认检查后端的SSL证书是否在系统信任的CA列表里——但自签名证书显然不在,所以要么让Nginx信任这个特定的自签名证书,要么禁用验证(后者不推荐,毕竟不安全)。我们来用更安全的第一种方案。
具体配置步骤
准备后端自签名证书文件
把后端服务器使用的自签名证书文件(比如命名为backend_selfsigned.crt)复制到Nginx服务器上的证书目录,比如/etc/pki/tls/certs/,确保Nginx进程有读取权限。修改Nginx配置文件
在你的location /块里添加以下SSL代理配置,完整的修改后配置如下,新增部分用*标注:
server { listen 80; server_name test.example.com www.test.example.com; return 301 https://$host$request_uri; add_header Content-Security-Policy upgrade-insecure-requests; } server { listen 443 ssl; server_name test.example.com www.test.example.com; ssl_certificate /etc/pki/tls/certs/CA_cert.pem; ssl_certificate_key /etc/pki/tls/private/cert_key.key; add_header Content-Security-Policy upgrade-insecure-requests; location / { 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; # 新增:告诉后端请求是HTTPS过来的 # 以下是新增的后端SSL信任配置 proxy_ssl_trusted_certificate /etc/pki/tls/certs/backend_selfsigned.crt; proxy_ssl_verify on; proxy_ssl_verify_depth 2; proxy_pass https://10.0.0.35; } location ~ ^/$ { return 301 https://test.example.com; } }
配置项说明
proxy_ssl_trusted_certificate:指定Nginx信任的后端证书文件,这样Nginx在和后端建立HTTPS连接时,会认可这个自签名证书的合法性。proxy_ssl_verify on;:开启后端证书验证,确保我们连接的是预期的后端服务器,避免中间人攻击。如果只是测试环境,你可以临时改成off,但生产环境一定要保持on。proxy_ssl_verify_depth 2;:设置证书链的验证深度,一般默认值就够用,这里加上是为了配置更完整。proxy_set_header X-Forwarded-Proto $scheme;:额外加这个是为了让后端服务器知道原始请求是HTTPS协议,避免一些跳转或资源加载的问题。
最后一步
配置修改完成后,先检查Nginx配置是否合法:
sudo nginx -t
如果提示test is successful,就重启Nginx生效:
sudo systemctl restart nginx
这样配置后,Nginx就能安全地使用自签名证书和后端通信,而前端用户只需要信任你的一年期CA证书,完美实现你想要的简化管理目标~
备注:内容来源于stack exchange,提问作者Abang




