帮助中心 >
  关于网络安全 >
  Nginx HTTPS配置的核心步骤有哪些
Nginx HTTPS配置的核心步骤有哪些
时间 : 2025-03-24 15:28:01
编辑 : Jtti

HTTPS常用于保证数据传输安全、提升用户信任、满足搜索引擎排名规则等。作为当下流行web服务器之一,nginx的HTTPS配置看似简单但是还是需要注意不少细节。从证书选择到加密套件调优,从自动续期到性能瓶颈突破,任何环境都和安全防护息息相关。

HTTPS的核心是SSL/TLS证书,而证书的获取与管理是配置的第一步。对于个人站点或中小型企业,Let's Encrypt提供的免费证书是最佳选择,其自动化工具Certbot可快速完成证书申请与Nginx配置。以Ubuntu系统为例,执行以下命令即可完成基础安装:  

sudo apt update  
sudo apt install certbot python3certbotnginx  
sudo certbot nginx d example.com d www.example.com  

此过程会自动修改Nginx配置,添加证书路径并启用443端口监听。但自动化工具生成的配置往往只满足基本需求,生产环境需进一步优化。基础HTTPS配置的核心在于server块的设定。以下是一个兼顾兼容性与安全性的模板:  

nginx  
server {  
listen 443 ssl http2;  
server_name example.com www.example.com;  
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;  
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;  
# 协议与套件配置  
ssl_protocols TLSv1.2 TLSv1.3;  
ssl_ciphers ECDHEECDSAAES128GCMSHA256:ECDHERSAAES128GCMSHA256:ECDHEECDSAAES256GCMSHA384:ECDHERSAAES256GCMSHA384;  
ssl_prefer_server_ciphers on;  
# 性能优化  
ssl_session_cache shared:SSL:10m;  
ssl_session_timeout 1d;  
ssl_session_tickets off;  
# 安全头  
add_header StrictTransportSecurity "maxage=63072000" always;  
add_header XContentTypeOptions nosniff;  
add_header XFrameOptions DENY;  
# 其他业务配置  
root /var/www/html;  
index index.html;  
}  
# HTTP强制跳转HTTPS  
server {  
listen 80;  
server_name example.com www.example.com;  
return 301 https://$host$request_uri;  
}  

此配置明确禁用已证实不安全的TLS 1.0/1.1版本,选用现代浏览器广泛支持的加密套件,并通过HSTS头强制客户端使用HTTPS连接。但需注意,HSTS的maxage设置过长可能导致无法回退,建议初期设置为604800(一周),确认无误后再延长至两年。  

证书链完整性是常见故障点。若Nginx配置中未包含中间证书,部分客户端(如旧版Android)会因无法构建完整信任链而报错。通过以下命令可验证证书链:  

openssl s_client connect example.com:443 showcerts  

输出应包含服务器证书、中间证书及根证书。使用Let's Encrypt证书时,fullchain.pem已包含必要链,但若使用其他CA颁发的证书,需手动拼接中间证书。  

性能优化是HTTPS落地的重要环节。TLS握手会增加服务器负载,通过以下策略可显著降低开销:  

1. 会话复用:  

nginx  
ssl_session_cache shared:SSL:50m;  
ssl_session_timeout 1d;  

共享会话缓存允许多个工作进程复用同一会话,减少重复密钥协商。  

2. OCSP Stapling:  

nginx  
ssl_stapling on;  
ssl_stapling_verify on;  
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;  
resolver 8.8.8.8 8.8.4.4 valid=300s;  

将OCSP查询结果缓存在服务端,避免客户端直接向CA发送请求,降低延迟。  

3. TLS 1.3优先:  

作为最新协议版本,TLS 1.3减少了握手步骤,实现“1RTT”甚至“0RTT”连接。但需注意,0RTT可能面临重放攻击风险,敏感操作应禁用:  

nginx  
ssl_early_data off;  

自动续期是证书管理的生命线。手动续期极易遗忘。通过crontab设置定时任务:  

0 3    /usr/bin/certbot renew quiet posthook "systemctl reload nginx"  

每日凌晨3点检查证书到期情况,续期后自动重载Nginx配置。当页面通过HTTPS加载,但子资源(如图片、JS)使用HTTP链接时,浏览器会阻止加载或提示警告。解决方案包括:  

1. 内容重写:  

nginx  
sub_filter 'http://' 'https://';  
sub_filter_once off; 

将响应内容中的HTTP链接替换为HTTPS。  

2. CSP头限制:  

nginx  
add_header ContentSecurityPolicy "defaultsrc https: 'unsafeinline' 'unsafeeval';";  

强制所有资源必须通过HTTPS加载。  

安全加固需多维度推进。除基础配置外,还应:  

禁用弱密码、密钥轮换、证书透明度监控、旧版客户端兼容性需要权衡取舍。可临时开启兼容模式:  

nginx  
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;  

但需同步加强入侵检测,并推动客户端升级。  

JTTI-Eom
JTTI-Defl
JTTI-COCO
JTTI-Selina
JTTI-Ellis