You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Nginx反向代理配置:使用自签名SSL证书连接后端服务器

Nginx反向代理配置:使用自签名SSL证书连接后端服务器

嗨,看起来你已经搞定了前端的HTTPS跳转和基础反向代理配置,现在就差让Nginx信任后端的自签名SSL证书这一步了。别担心,这其实很简单,只需要在你的Nginx配置里添加几行和后端SSL验证相关的配置就行,这样既能保证通信安全,又能实现你只每年更新前端CA证书的目标。

问题核心

当前你的Nginx在反向代理到https://10.0.0.35时,会默认检查后端的SSL证书是否在系统信任的CA列表里——但自签名证书显然不在,所以要么让Nginx信任这个特定的自签名证书,要么禁用验证(后者不推荐,毕竟不安全)。我们来用更安全的第一种方案。

具体配置步骤

  1. 准备后端自签名证书文件
    把后端服务器使用的自签名证书文件(比如命名为backend_selfsigned.crt)复制到Nginx服务器上的证书目录,比如/etc/pki/tls/certs/,确保Nginx进程有读取权限。

  2. 修改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

火山引擎 最新活动