Nginx安全防护与HTTPS部署实战
目录
一、基础安全防护配置
二、HTTPS部署实战
三、高级安全与性能优化
一、基础安全防护配置
1. 隐藏Nginx版本号
攻击者可能利用特定版本的漏洞发起攻击。通过修改配置文件隐藏版本号:
server {
server_tokens off; # 在http或server块中添加
}
验证方法:curl -I http://your-domain,响应头中不再显示版本信息1。
2. 限制危险HTTP方法
禁用不安全的请求方法(如TRACE、PUT、DELETE):
if ($request_method !~ ^(GET|POST|HEAD)$) {
return 444; # 非白名单方法直接关闭连接
}
日志验证:检查access.log中是否有被拦截的请求1。
3. 防御CC攻击
使用limit_req模块限制请求速率:
http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
limit_req zone=req_limit burst=20 nodelay;
}
}
参数说明:
- rate=10r/s:每秒允许10个请求。
- burst=20:允许突发20个请求排队,超限返回5031。
4. 防盗链配置
防止其他站点盗用静态资源:
location ~* \.(jpg|gif|png)$ {
valid_referers none blocked your-domain.com *.your-domain.com;
if ($invalid_referer) {
return 403;
}
}
需在服务器上配置域名解析和资源访问权限1。
5. 动态IP黑名单
实时封禁恶意IP:
http {
geo $block_ip {
default 0;
include /usr/local/nginx/conf/blockips.conf; # 黑名单文件
}
server {
if ($block_ip) { return 403; }
}
}
黑名单文件示例:
192.168.1.0/24 1; # 封禁整个网段
192.168.10.102 1; # 封禁单个IP
支持按需动态更新黑名单19。
二、HTTPS部署实战
1. 获取SSL证书
- 免费证书:推荐使用Let's Encrypt,通过Certbot自动化工具申请:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
- 商业证书:从阿里云、DigiCert等平台申请37。
2. 基础HTTPS配置
server {
listen 443 ssl http2; # 启用HTTP/2
server_name your-domain.com;
ssl_certificate /etc/nginx/cert/fullchain.pem;
ssl_certificate_key /etc/nginx/cert/privkey.pem;
# 强制TLS 1.2及以上,禁用不安全协议
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH;
ssl_prefer_server_ciphers on;
# 自动重定向HTTP到HTTPS
location / {
proxy_pass http://backend;
}
}
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
关键优化点:
- HTTP/2:提升并发性能,减少延迟810。
- TLS 1.3:减少握手时间(需OpenSSL 1.1.1+)26。
三、高级安全与性能优化
1. OCSP Stapling
减少证书验证延迟:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/cert/chain.pem;
验证命令:openssl s_client -connect your-domain:443 -status810。
2. Brotli压缩
减少传输体积(需编译Nginx时添加模块):
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript;
压缩效果比Gzip提升15%-25%26。
3. 会话复用与缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_buffer_size 4k; # 减少首次响应延迟
调整ssl_buffer_size至4k可优化小文件传输10。
4. HSTS强制HTTPS
添加HTTP头强制浏览器使用HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
防止SSL剥离攻击39。
四、验证与监控
- 证书有效性检查:
- 使用curl -vI https://your-domain检查协议版本。
- 通过SSL Labs测试评估配置安全性37。
- 日志分析:
- 监控access.log和error.log,识别异常请求。
- 使用工具如fail2ban自动封禁攻击IP9。