nginx https多环境配置核心是按需隔离:为dev/test/staging/prod分配独立server_name或非标端口,证书分目录物理隔离(如/etc/nginx/ssl/dev/),各server块明确引用对应证书路径,配合精准location代理、x-forwarded-proto头传递及分级http跳转策略。

配置 Nginx HTTPS 并适配多种开发环境,关键不在堆砌功能,而在于按需隔离、灵活切换、避免冲突。核心是:一套 Nginx 实例,多组 server 块,各自独立监听、证书、代理逻辑,互不干扰。
区分环境用不同 server_name 和端口策略
不要把所有环境(如 dev / test / staging / prod)塞进同一个 server 块。应为每个环境分配独立的 server_name(如 dev.example.com、staging.example.com)或使用 非标准 HTTPS 端口(如 8443、8444)临时调试,避免与正式 443 冲突。
- 开发环境可绑定本地域名(如
local.api),配合 hosts 文件,用自签名证书快速验证 HTTPS 流程 - 测试/预发环境建议用 Let’s Encrypt 的 staging 环境(
--staging参数)申请免费证书,零成本且无频次限制 - 生产环境必须用正式证书,并启用 OCSP Stapling 和 HSTS 头增强可信度
证书管理按环境物理隔离
将不同环境的证书文件分目录存放,例如:
-
/etc/nginx/ssl/dev/→dev.crt+dev.key -
/etc/nginx/ssl/staging/→staging.pem+staging.key -
/etc/nginx/ssl/prod/→fullchain.pem+privkey.pem+dhparam.pem
每个 server 块中明确引用对应路径,避免误用。私钥权限统一设为 600,目录权限为 700,防止敏感泄露。
反向代理适配不同后端协议和路径
Java、Node.js、Python 等服务启动端口和上下文路径往往不同。Nginx 的 location 配置需精准匹配:
- Java 项目常用
/api/前缀 →location /api/ { proxy_pass http://localhost:8080/; }(注意末尾斜杠对路径重写的影响) - 前端单页应用(Vue/React)需 fallback 到
index.html→location / { try_files $uri $uri/ /index.html; } - 若后端要求识别真实协议,务必设置:
proxy_set_header X-Forwarded-Proto $scheme;,Java 应用依赖它生成正确跳转链接
HTTP 自动跳转要按环境分级控制
不是所有环境都需要强制跳转 HTTPS:
- 开发环境可保留
listen 80仅作调试,不加 rewrite,方便 curl 或 Postman 直连 - 测试/预发环境建议加 301 跳转,但用
return 301 https://$host$request_uri;替代 rewrite,更高效安全 - 生产环境除跳转外,应在响应头中加入:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;,启用 HSTS











