nginx https安全基线需兼顾防攻击、保加密、控暴露、提性能:隐藏server版本(server_tokens off)、强制https+hsts预加载、禁用tls 1.0/1.1并选用ecdhe-aes-gcm套件、启用ocsp stapling、拒绝危险http方法、限制请求体大小与超时、禁止访问.git等敏感路径。

要全面加固和优化 Nginx 的 HTTPS 安全基线配置,核心是兼顾「防攻击、保加密、控暴露、提性能」四个维度。不是堆砌参数,而是每项配置都有明确威胁模型和落地验证方式。
隐藏服务指纹,减少信息泄露
攻击者常通过 Server 响应头识别 Nginx 版本(如 nginx/1.24.0),进而检索对应 CVE。必须关闭版本标识:
- 在
http块中添加:server_tokens off; - 验证方式:执行
curl -I http://your-domain.com,确认响应头中Server字段只显示nginx,不带版本号 - 补充建议:避免在错误页中输出 Nginx 默认模板(可自定义
error_page 404 /404.html)
强制 HTTPS 并启用 HSTS 防降级
仅靠 301 跳转不够——用户首次访问仍可能走 HTTP,存在中间人劫持风险。需双层防护:
- HTTP 端口(80)配置纯跳转,不处理 ACME 挑战以外的任何逻辑:
server { listen 80; server_name _; location /.well-known/acme-challenge/ { root /var/www/certbot; } location / { return 301 https://$host$request_uri; } } - HTTPS 端口(443)必须添加 HSTS 头:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
注意:开启preload前需确保全站资源(含第三方脚本、图片)都支持 HTTPS,否则将导致页面白屏
TLS 协议与加密套件硬性收紧
默认配置往往兼容老旧客户端,但会牺牲安全性。生产环境应主动放弃低版本协议和弱算法:
- 禁用 TLS 1.0 和 1.1:
ssl_protocols TLSv1.2 TLSv1.3; - 使用现代加密套件(优先 ECDHE + AES-GCM):
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; - 开启 OCSP Stapling 加速证书状态验证:
ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 1.1.1.1 valid=300s;
可降低 TLS 握手延迟约 40%,且避免客户端直连 CA 查询失败导致连接中断
请求层防护与资源隔离
HTTPS 只解决传输加密,不代表服务本身安全。需叠加应用层控制:
- 拒绝危险 HTTP 方法:
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS|PATCH)$) { return 405; } - 限制请求体大小,防大文件上传耗尽内存:
client_max_body_size 10m; client_body_buffer_size 128k; - 禁止访问敏感路径(如 Git 元数据、配置文件):
location ~ /\.git { deny all; } location ~ /\.ht { deny all; } - 设置合理超时,缓解 Slowloris 类攻击:
client_header_timeout 15; client_body_timeout 15; send_timeout 15;











