最简https配置需在server块中监听443端口并声明ssl,指定域名、证书链和私钥路径;启用tlsv1.2/1.3,限制安全加密套件;配置会话缓存、hsts头及信任证书链;另设80端口server块返回301跳转。

直接在 server 块里写 SSL 配置,核心是监听 443 端口并指定证书路径,不需要额外模块加载(前提是 Nginx 编译时已启用 --with-http_ssl_module)。
基础 HTTPS server 配置
这是最简可用的写法,适用于快速启用 HTTPS:
-
listen 443 ssl;—— 必须显式声明ssl,否则不启用 TLS -
server_name example.com;—— 域名要与证书绑定的域名一致 -
ssl_certificate /path/to/fullchain.pem;—— 推荐用包含服务器证书 + 中间证书的完整链文件(如 Let’s Encrypt 的fullchain.pem) -
ssl_certificate_key /path/to/privkey.pem;—— 私钥文件,权限建议设为600
推荐的安全协议与加密套件
仅启用现代、安全的协议和算法,避免降级风险:
-
ssl_protocols TLSv1.2 TLSv1.3;—— 关闭 TLSv1.0/1.1(已存在已知漏洞) -
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;—— 优先选前向安全(ECDHE)、AEAD 加密(GCM)的组合 -
ssl_prefer_server_ciphers off;—— TLSv1.3 下该指令无效,但保留兼容性;实际由ssl_ciphers主导
提升性能与信任度的关键补充
让连接更快、更可信,浏览器也更愿意显示“安全”标识:
-
ssl_session_cache shared:SSL:10m;和ssl_session_timeout 4h;—— 复用会话减少握手开销 -
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;—— 强制浏览器后续只走 HTTPS(HSTS) -
ssl_trusted_certificate /path/to/ca-bundle.crt;—— 显式提供信任链,解决部分客户端证书链校验失败问题(尤其 Android 或旧系统)
HTTP 自动跳转 HTTPS
单独写一个 server 块监听 80 端口,做 301 重定向:
listen 80;server_name example.com;-
return 301 https://$host$request_uri;—— 保持原始路径和查询参数











