nginx作为https终端代理,自行处理tls加解密并以http转发请求;需配置ssl证书、监听443端口、80端口301跳转,并设置proxy_pass及x-forwarded-proto等关键头。

Nginx 作为 HTTPS 终端代理,核心是它自己处理 TLS 加密/解密,再以 HTTP(或 HTTPS)把请求转发给后端。这种模式下,SSL 证书直接配在 Nginx 上,后端无需支持 HTTPS,大幅简化部署,也更常见于生产环境。
准备并放置 SSL 证书文件
你需要一对有效的证书文件:公钥证书(含完整链,通常为 .pem 或 .crt)和私钥(.key)。推荐使用 Let’s Encrypt 免费证书:
- 运行
sudo certbot --nginx -d yourdomain.com,Certbot 会自动获取、存放证书,并修改 Nginx 配置 - 手动方式:把证书文件放到统一目录,例如
/etc/nginx/ssl/yourdomain.com/,确保 Nginx 进程有读取权限 - 若用商业证书,注意合并中间证书到主证书文件末尾,否则部分客户端可能验证失败
配置监听 443 端口并加载证书
在 server 块中启用 HTTPS 监听,并指定证书路径:
-
listen 443 ssl;—— 明确启用 SSL 模式 -
server_name yourdomain.com;—— 必须与证书绑定域名一致 ssl_certificate /etc/nginx/ssl/yourdomain.com/fullchain.pem;ssl_certificate_key /etc/nginx/ssl/yourdomain.com/privkey.pem;
强制 HTTP 自动跳转 HTTPS
避免用户手动输入 http://,应在另一个监听 80 端口的 server 块中做 301 重定向:
listen 80;server_name yourdomain.com;return 301 https://$server_name$request_uri;
设置反向代理关键头与行为
让后端能正确识别原始协议、真实 IP 和 Host:
-
proxy_pass http://127.0.0.1:3000;—— 后端用 HTTP 即可(这是 HTTPS 终端代理的典型用法) -
proxy_set_header X-Forwarded-Proto $scheme;—— 告诉后端请求来自 HTTPS -
proxy_set_header Host $host;和proxy_set_header X-Real-IP $remote_addr; - 建议加上超时控制:
proxy_connect_timeout 60s;、proxy_read_timeout 120s;











