Nginx SSL 配置文件详解
一 前置准备与目录结构
二 最小可用 HTTPS 配置
server {
listen 443 ssl http2;
server_name example.com www.example.com;
# 证书与私钥(Let's Encrypt 常用 fullchain.pem + privkey.pem)
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 仅启用安全的 TLS 协议
ssl_protocols TLSv1.2 TLSv1.3;
# 优先使用服务器套件,选择支持前向保密的 GCM 套件
ssl_prefer_server_ciphers on;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:
ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
# 会话复用,提升握手性能
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
root /usr/share/nginx/html;
index index.html;
}
三 进阶安全与性能优化
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
四 完整示例含 HTTP 跳转与验证
# HTTP -> HTTPS 跳转
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
# HTTPS 服务
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 安全协议与套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:
ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
# 会话复用
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
# HSTS(谨慎启用,确保全站 HTTPS)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
root /usr/share/nginx/html;
index index.html;
}
五 常见问题与排查要点