TLS 与安全
Nginx 可以终止 Client TLS,再以 HTTP 或 HTTPS 连接 Upstream。若 Proxy 到 Upstream 跨越不可信网络,仍应加密并验证 Upstream 身份。
HTTPS 最小结构
nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/tls/fullchain.pem;
ssl_certificate_key /etc/nginx/tls/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_cache shared:TLS:10m;
ssl_session_timeout 10m;
location / {
root /srv/www;
}
}Cipher、Curve、OCSP 和 Session Ticket 策略与 Nginx/OpenSSL Version 及 Client Compatibility 有关,应使用组织安全基线和自动化测试,不复制多年不变的 Cipher List。
Certificate Private Key 必须限制文件权限。ACME Client 更新证书后要测试并 Reload Nginx;只更新磁盘文件不会自动替换 Worker 已加载的证书。
Security Header
nginx
add_header X-Content-Type-Options nosniff always;
add_header Referrer-Policy strict-origin-when-cross-origin always;
add_header Content-Security-Policy "default-src 'self'" always;- CSP 必须根据实际 Frontend Resource 逐步收紧,盲目复制可能使页面不可用。
- HSTS 只应在整个 Domain 已稳定支持 HTTPS 后启用,
includeSubDomains和 Preload 更难撤销。 X-XSS-Protection已被现代浏览器弃用,不应作为核心防护。X-Frame-Options可用于旧 Client;现代策略可由 CSPframe-ancestors表达。
Rate Limiting
nginx
limit_req_zone $binary_remote_addr zone=per_ip:10m rate=10r/s;
server {
location /api/ {
limit_req zone=per_ip burst=20 nodelay;
limit_req_status 429;
proxy_pass http://backend;
}
}若 Nginx 前还有可信 Load Balancer,应先正确恢复 Client Address,否则限流 Key 可能全部变成代理 IP。IP Rate Limit 只能缓解流量,不能代替 User、Tenant、API Key 和业务资源维度的限流。
访问控制
nginx
location /internal/ {
allow 192.0.2.0/24;
deny all;
proxy_pass http://backend;
}IP Allowlist 不是身份认证。动态 Cloud Network、IPv6、Proxy 和 NAT 都可能改变地址语义,敏感接口仍需应用层认证授权。