1. 获取并自动续订免费SSL证书(Let’s Encrypt)
使用Certbot工具获取Let’s Encrypt免费证书,支持自动续订,避免证书过期导致的服务中断。安装Certbot及Nginx插件后,通过一条命令即可完成证书申请与Nginx配置集成:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
证书有效期为90天,需设置定时任务自动续订(如每天凌晨3点检查并续订):
sudo crontab -e
# 添加以下内容
0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
此操作确保SSL证书始终有效,无需手动干预。
2. 强制HTTP跳转HTTPS
通过Nginx配置将所有HTTP请求(端口80)重定向至HTTPS(端口443),彻底杜绝明文传输风险。推荐使用301永久重定向(更利于SEO),配置示例如下:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$server_name$request_uri;
}
此配置简洁高效,避免了rewrite规则可能带来的性能损耗。
3. 优化SSL协议与加密套件
禁用不安全的SSLv2、SSLv3及旧版TLS协议(如TLSv1.0、TLSv1.1),仅启用TLSv1.2及以上版本;选择强加密套件(优先使用ECDHE密钥交换算法,支持前向保密),配置如下:
ssl_protocols TLSv1.2 TLSv1.3;
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';
ssl_prefer_server_ciphers on;
此设置确保仅使用安全的加密方式,抵御中间人攻击与降级攻击。
4. 启用HTTP/2协议
HTTP/2支持多路复用、头部压缩等功能,可显著提升网站加载速度(尤其对于图片、CSS等静态资源)。在SSL监听端口后添加http2参数即可启用:
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
# 其他SSL配置...
}
HTTP/2兼容现代浏览器,无需用户额外操作即可享受性能提升。
5. 配置HSTS(HTTP Strict Transport Security)
通过HSTS头强制浏览器在指定时间内(如1年)仅通过HTTPS访问网站,防止SSL剥离攻击(攻击者将HTTPS请求降级为HTTP)。配置示例如下:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
max-age=31536000:有效期1年(单位:秒);includeSubDomains:覆盖所有子域名;preload:允许浏览器预加载HSTS列表(需提交至HSTS预加载列表)。6. 启用OCSP Stapling
OCSP Stapling(在线证书状态协议封套)由服务器主动获取证书状态并发送给客户端,减少客户端验证证书的时间(避免客户端向证书颁发机构查询),同时降低隐私泄露风险。配置如下:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
ssl_stapling on:启用OCSP Stapling;ssl_stapling_verify on:验证OCSP响应的有效性;resolver:指定DNS服务器(用于解析证书颁发机构的OCSP URL)。7. 隐藏Nginx版本信息
Nginx默认在响应头中暴露版本号(如Server: nginx/1.25.3),攻击者可利用版本信息查找已知漏洞。通过以下配置隐藏版本号:
http {
server_tokens off;
# 可选:自定义服务器标识(进一步混淆)
more_set_headers 'Server: Custom Web Server';
}
此操作降低针对性攻击的成功率。
8. 限制请求方法与路径访问
仅允许必要的HTTP方法(如GET、POST),拒绝DELETE、PUT等危险方法;禁止访问敏感目录(如.htaccess、.git),防止信息泄露:
location / {
limit_except GET POST {
deny all;
}
}
location ~ /\.ht {
deny all;
}
此配置减少攻击面,防范未授权的操作与信息获取。
9. 优化SSL会话缓存与性能
启用SSL会话缓存,减少重复握手的开销(握手过程消耗较多CPU资源),提升并发性能:
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
ssl_session_cache:共享内存缓存(10MB),存储会话信息;ssl_session_timeout:会话有效期10分钟;ssl_session_tickets off:禁用会话票证(更安全,但可能略微影响性能)。10. 定期监控与日志审计
通过Nginx的访问日志(access_log)与错误日志(error_log)监控异常行为(如大量404请求、非法方法访问),及时发现潜在攻击:
server {
access_log /var/log/nginx/yourdomain_access.log;
error_log /var/log/nginx/yourdomain_error.log warn;
}
定期检查日志(如使用grep、awk工具),分析异常请求模式,调整安全策略。