Nginx 配置为 HTTPS 网关需监听 443 端口并终止 TLS,通过 ssl_certificate 和 key 加载证书,80 端口重定向至 HTTPS,proxy_pass 转发请求并设置必要头部,同时启用强 TLS 版本、OCSP Stapling 及动态证书管理。

把 Nginx 配置成 HTTPS 协议转换网关,核心是让它在 443 端口接收加密请求、完成 TLS 解密,再以明文 HTTP(或 HTTP/2)转发给后端服务。整个过程不依赖后端处理证书,由 Nginx 统一终止 HTTPS。
启用 HTTPS 监听与证书加载
确保 Nginx 已编译启用 http_ssl_module(主流发行版默认支持)。在 server 块中配置:
- 使用
listen 443 ssl http2;启用 HTTPS + HTTP/2 支持 -
server_name设为实际域名(如api.example.com) -
ssl_certificate指向完整证书链(含 root 和 intermediate),ssl_certificate_key指向私钥 - 证书建议存放在统一路径,例如
/etc/nginx/certs/api.example.com/fullchain.pem和/etc/nginx/certs/api.example.com/privkey.pem
强制 HTTP 自动跳转 HTTPS
避免用户手动输入 http:// 导致明文传输,在 80 端口 server 块中添加重定向:
-
listen 80;+server_name api.example.com; return 301 https://$host$request_uri;- 不推荐用
rewrite,因return更高效、语义更清晰
配置反向代理路由规则
HTTPS 终止后,Nginx 根据路径将请求分发到不同后端服务:
-
location /api/ { proxy_pass http://localhost:8001/api/; }—— 注意结尾斜杠必须一致,否则路径拼接出错 -
location /user/ { proxy_pass http://10.0.1.5:3000/; }—— 可代理远程域名或内网 IP - 务必设置关键代理头:
proxy_set_header Host $host;、X-Real-IP、X-Forwarded-For,方便后端识别真实客户端 - 若后端是 WebSocket,需额外加:
proxy_http_version 1.1;、proxy_set_header Upgrade $http_upgrade;、proxy_set_header Connection "upgrade";
提升安全性与可维护性
生产环境不能只满足“能用”,还需兼顾健壮与可扩展:
- TLS 配置推荐:仅启用
TLSv1.2和TLSv1.3;禁用SSLv3、TLSv1.0/1.1;使用强密码套件(如ECDHE-ECDSA-AES128-GCM-SHA256) - 开启 OCSP Stapling 减少握手延迟:
ssl_stapling on;、ssl_stapling_verify on;,并配置resolver - 证书更新后执行
nginx -t && nginx -s reload,reload 不中断现有连接,适合线上平滑更新 - 多域名场景下,可用
map指令动态匹配证书路径,避免硬编码;高阶需求可结合ssl_certificate_by_lua_block实现运行时证书加载


















