在nginx层统一终结https是最优实践,后端保持http内网通信;需配置域名解析、开放80/443端口、获取泛域名ssl证书并正确部署;nginx配置需启用http/2、tls1.2+、安全加密套件及ocsp装订;80端口强制301跳转https,并添加hsts头与反向代理支持。

直接在 Nginx 层统一终结 HTTPS,是云端原生部署最合理、最稳定的做法。后端服务(如 Go/Gin、Node.js、Java)保持 HTTP 内网通信,由 Nginx 负责加密、证书管理、协议升级与安全加固——这样既降低后端复杂度,又便于集中治理和灰度发布。
域名与网络层准备
确保域名已正确解析到云服务器公网 IP,并开放 80 和 443 端口:
- 在云平台(如阿里云、火山引擎、腾讯云)控制台完成 A 记录解析,指向实例的公网 IP
- 检查安全组规则:入方向需放行 TCP 80(HTTP)、TCP 443(HTTPS)
- 确认服务器未启用防火墙拦截(如 ufw、firewalld),或已添加对应端口策略
证书获取与存放
优先选用支持泛域名、自动续期的免费证书方案(如乐此云签 letsssl.cn),避免人工维护过期风险:
- 申请时勾选“泛域名,包含根域”,例如填 example.com,即可同时覆盖 example.com 和 *.example.com
- 使用 CNAME 验证方式,按提示在 DNS 控制台添加一条 CNAME 解析记录
- 证书签发后下载 Nginx 版本,解压得到 .pem(公钥证书)和 .key(私钥)两个文件
- 上传至服务器固定路径,推荐:/etc/nginx/ssl/example.com.pem 和 /etc/nginx/ssl/example.com.key
Nginx 主配置要点
在 /etc/nginx/conf.d/your-site.conf 中新增 server 块,核心配置如下:
- listen 443 ssl http2:启用 HTTPS + HTTP/2 提升传输效率
- server_name example.com www.example.com:明确绑定域名,支持多域名
- ssl_certificate /etc/nginx/ssl/example.com.pem 和 ssl_certificate_key /etc/nginx/ssl/example.com.key:路径必须准确,权限建议设为 600(仅 root 可读)
- 强制启用现代协议:ssl_protocols TLSv1.2 TLSv1.3,禁用 TLSv1.0/1.1
- 精简加密套件:ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256,兼顾安全与兼容性
- 开启 OCSP 装订:ssl_stapling on 和 ssl_stapling_verify on,减少握手延迟
HTTP 自动跳转与安全增强
补充一个 80 端口 server 块,实现全站强制 HTTPS:
- return 301 https://$host$request_uri:简洁高效,不依赖 rewrite
- 添加 HSTS 头:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always,让浏览器后续请求自动走 HTTPS
- 若前端为 Vue/React 单页应用,在 location / 块中使用 try_files $uri $uri/ /index.html 支持 History 模式路由
- API 请求通过反向代理转发:location /api { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Forwarded-Proto $scheme; },确保后端能识别真实协议











