Nginx 很常见的职责,是在最前面终止 HTTPS。
也就是:
浏览器 <== HTTPS ==> Nginx 城市总闸口 <== HTTP/HTTPS ==> 后方服务一份最基本的 HTTPS 配置长这样:
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/certs/example.com.fullchain.pem;
ssl_certificate_key /etc/nginx/certs/example.com.key;
location / {
root /srv/www/site;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://api_backend/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}同时通常还会保留一个 80 端口闸门,专门做跳转:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}你要理解 HTTPS 在这里的工程意义:
- 加密客户端到总闸口之间的数据
- 统一证书管理入口
- 让后方应用不必每个都各自处理公网 TLS
- 便于集中做安全头、重定向、日志、限流等边缘动作
再给一个生产上很常见的基础优化:
http {
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
}它相当于让城市总闸口保留一部分“安检复用记录”,减少重复握手成本。
如果你准备加 HSTS,也就是:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;前提是你已经确认:
- 全站、全子域都稳定支持 HTTPS
- 不会再回退到 HTTP
因为这相当于告诉浏览器:“以后只准走加密通道”。