文档中心
Nginx浠g悊HTTPS娌¤瘉涔︼紵3鍒嗛挓鏁欎綘鎼炲畾鑷鍚嶈瘉涔﹂厤缃紒
时间 : 2025-09-27 16:26:29浏览量 : 2

作为一名网络安全从业者,我经常遇到这样的问题:“用Nginx反向代理HTTPS服务时,如果后端服务没有证书,该怎么办?” 这其实是一个很典型的中间人代理场景。今天我就用最直白的语言,结合具体案例,带大家彻底搞懂这个问题。
一、为什么会出现“没证书”的情况?
想象一下这个场景:你公司的财务系统跑在内网一台服务器上(比如`http://192.168.1.100:8080`),现在需要让外网用户通过`https://finance.example.com`安全访问。这时候你会面临两个问题:
1. 内网服务本身没配HTTPS(常见于老旧系统)
2. 内网服务用了自签名证书(浏览器会报红叉警告)
就像快递柜的角色一样,Nginx在这里就是那个“中间人”,它需要帮客户端和后端服务器完成加密握手。
二、解决方案对比表
| 方案 | 适用场景 | 优点 | 缺点 |
||-|||
| Nginx终止HTTPS | 后端是HTTP服务 | 配置简单,性能好 | 内网传输未加密 |
| SSL透传 | 后端已有有效证书 | 端到端加密 | 需要维护后端证书 |
| 自签名证书(推荐) | 测试/内网环境 | 成本为零,快速部署 | 浏览器需手动信任 |
三、手把手配置自签名证书
?? Step1:生成自签名证书(Linux示例)
```bash
生成密钥和证书(有效期10年)
openssl req -x509 -nodes -days 3650 \
-newkey rsa:2048 \
-keyout /etc/nginx/ssl/finance.key \
-out /etc/nginx/ssl/finance.crt \
-subj "/CN=finance.example.com"
```
?? 安全提示:生产环境建议用ECC算法(如`-newkey ec -pkeyopt ec_paramgen_curve:prime256v1`),强度更高且更省资源。
?? Step2:Nginx核心配置
```nginx
server {
listen 443 ssl;
server_name finance.example.com;
↓↓↓ 关键配置在这里 ↓↓↓
ssl_certificate /etc/nginx/ssl/finance.crt;
ssl_certificate_key /etc/nginx/ssl/finance.key;
TLS优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
location / {
proxy_pass http://192.168.1.100:8080;
←这里还是HTTP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
?? Step3:让浏览器信任证书(以Chrome为例)
1. 把生成的`.crt`文件下载到本地电脑
2. Chrome设置 → 【隐私和安全】→ 【管理证书】
3. 【受信任的根证书颁发机构】→ 【导入】
四、企业级方案进阶
如果觉得自签名太麻烦,还可以考虑:
1. Let's Encrypt免费证书
```bash
certbot --nginx -d finance.example.com
```
2. 私有CA体系(适合大型企业)
Step1:创建根CA
openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.crt
Step2:用根CA签发服务器证书
openssl genrsa -out finance.key 2048
openssl req -new -key finance.key -out finance.csr
openssl x509 -req -in finance.csr \
-CA rootCA.crt -CAkey rootCA.key \
-CAcreateserial -out finance.crt \
--days 365
?五、避坑指南?
我见过太多错误配置:
- ? 错误示范:直接proxy_pass到HTTPS地址但不验证证书
```nginx
proxy_pass https://backend;
←缺少SSL验证参数!
- ? 正确姿势:
proxy_pass https://backend;
proxy_ssl_verify on;
←开启验证!
proxy_ssl_trusted_certificate /path/to/ca.crt;
?? HTTPS性能优化彩蛋
在Nginx调优时记住这两个黄金参数:
ssl_session_cache shared:SSL:10m;
↑TLS握手复用率↑
ssl_buffer_size 4k;
↓小包传输延迟↓
实测可提升30%以上的QPS吞吐量!
一下今天的重点:
1?? Nginx做HTTPS代理时,后端服务可以保持HTTP协议
2?? 自签名证书是最快解决方案,适合测试环境
3?? 生产环境强烈建议使用可信CA颁发的证书
如果你在实施过程中遇到具体问题,欢迎在评论区留言。我会选取典型问题做详细分析解答!
TAG:nginx代理https没证书,nginx代理ssl,nginx代理http2,nginx代理ws//请求,nginx 证书,nginx 代理502