在 Nginx 反向代理场景下为 API 接口启用 SSL/TLS,本质是将 HTTPS 终止(TLS termination)放在 Nginx 层,后端 API 服务仍可使用 HTTP(或内部 TLS),由 Nginx 负责证书加载、加密解密与协议升级。核心步骤包括:获取并部署 SSL证书、配置 server 块启用 HTTPS、设置 proxy_pass 转发至上游 API 服务,并正确透传客户端真实信息。
典型配置示例如下(假设 API 服务监听于 http://127.0.0.1:8080,域名 api.example.com):
server {
listen 443 ssl http2;
server_name api.example.com;
ssl_certificate /path/to/fullchain.pem; # 证书链(含根+中间)
ssl_certificate_key /path/to/privkey.pem; # 私钥(需严格权限 600)
推荐启用的现代 TLS 策略(兼容主流客户端)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
HSTS(可选但推荐,尤其对公共 API)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
}
可选:HTTP → HTTPS 强制跳转
server {
listen 80;
server_name api.example.com;
return 301 https://$server_name$request_uri;
}
证书文件可通过 免费ssl证书(如 Let's Encrypt)或商业 DV SSL证书 获取;若 API 涉及企业身份验证或高信任场景,建议选用 OV SSL证书 或 EV SSL证书,以增强调用方对服务端身份的信任。
600,且不可被 Nginx 工作进程以外用户读取;避免将私钥置于 Web 可访问路径。ssl_certificate 必须包含完整证书链(域名证书 + 中间 CA),否则部分客户端(如 Java、curl 默认配置)会因无法构建信任链而报错 SSL_ERROR_BAD_CERT_DOMAIN 或 CERTIFICATE_VERIFY_FAILED。proxy_pass https://... 实现端到端加密,此时需在 Nginx 配置 proxy_ssl_trusted_certificate 并校验后端证书。加密您的网站,赢得客户信任!