要在Nginx上配置HTTPS支持,您需要完成以下步骤:
首先,您需要获取SSL证书和私钥文件。您可以从以下途径获取: - 从证书颁发机构(CA)如Let's Encrypt、DigiCert等购买 - 使用Let's Encrypt免费证书(推荐) - 自签名证书(仅用于测试)
以下是一个基本的HTTPS配置示例:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
# 安全增强配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
# 其他配置...
location / {
root /var/www/html;
index index.html index.htm;
}
}
使用Certbot工具自动获取和配置Let's Encrypt证书:
# Ubuntu/Debian
sudo apt-get install certbot python3-certbot-nginx
# CentOS/RHEL
sudo yum install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Certbot会自动完成证书获取和Nginx配置。
为了强制使用HTTPS,添加以下配置将HTTP(80端口)请求重定向到HTTPS:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
# 启用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 SAMEORIGIN;
# XSS保护
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;
sudo nginx -t
sudo systemctl reload nginx
Let's Encrypt证书有效期为90天,设置自动续订:
sudo certbot renew --dry-run # 测试续订
然后添加cron任务(每月自动续订):
0 0 1 * * /usr/bin/certbot renew --quiet
通过以上步骤,您的Nginx服务器将安全地支持HTTPS连接。