配置SSL证书是保护网站安全的重要步骤。以下是详细的Nginx SSL证书配置方法:
获取SSL证书(通常包括以下文件):
domain.crt
)chain.crt
)domain.key
)将证书文件上传到服务器(建议存放在 /etc/nginx/ssl/
目录)
在Nginx配置文件中(通常在 /etc/nginx/sites-available/your-site
)添加以下内容:
server {
listen 443 ssl;
server_name yourdomain.com;
# 证书路径
ssl_certificate /etc/nginx/ssl/domain.crt;
ssl_certificate_key /etc/nginx/ssl/domain.key;
# 证书链配置
ssl_trusted_certificate /etc/nginx/ssl/chain.crt;
# SSL协议配置
ssl_protocols TLSv1.2 TLSv1.3;
# 加密套件配置
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_prefer_server_ciphers on;
# 其他配置...
location / {
# 网站内容配置
}
}
# 启用HSTS (HTTP Strict Transport Security)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 禁用不安全的内容类型
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";
# OCSP Stapling 配置
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
测试Nginx配置是否正确:
sudo nginx -t
重新加载Nginx配置:
sudo systemctl reload nginx
如果使用Let's Encrypt证书,可以设置自动续期:
安装Certbot:
sudo apt install certbot python3-certbot-nginx
获取证书:
sudo certbot --nginx -d yourdomain.com
设置自动续期(添加到crontab):
echo "0 12 * * * /usr/bin/certbot renew --quiet" | sudo tee -a /etc/crontab > /dev/null
确保证书和私钥文件的权限设置为仅root可读:
chmod 600 /etc/nginx/ssl/*
定期检查证书有效期,避免过期
使用SSL测试工具(如 SSL Labs)验证配置安全性
对于现代浏览器,建议禁用TLS 1.0和1.1,仅使用TLS 1.2和1.3
考虑启用HTTP/2以提升性能:
listen 443 ssl http2;
通过以上配置,您的Nginx服务器将能够提供安全的HTTPS连接,保护用户数据传输的安全性。