以下是Nginx生产环境安全配置加固的综合方案,结合多个技术实践和行业标准整理:
一、基础安全防护
1. 隐藏版本信息
- 在
http
或server
块添加server_tokens off;
,避免暴露Nginx版本号。 - 使用
headers-more-nginx-module
模块彻底移除响应头中的Server: nginx
标识。
2. 访问控制与权限限制
- 使用
allow/deny
指令限制敏感接口的IP访问范围。 - 通过
worker_processes
和worker_connections
合理配置并发连接数。 - 以非root用户运行Nginx进程,并通过user指令指定低权限账户。
3. SSL/TLS加固
- 启用TLS 1.3协议,禁用SSLv2/SSLv3等不安全协议。
- 配置强加密套件,例如:
nginx">ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
- 强制HTTP跳转HTTPS,并启用HSTS头部。
二、请求与资源防护
1. 请求限制与防DDoS
- 设置
limit_conn_zone
限制单IP并发连接数,limit_req_zone
限制请求速率。 - 配置超时参数:
nginx">client_body_timeout 10s;
client_header_timeout 10s;
keepalive_timeout 5s;
- 禁用
TRACE
方法:limit_except GET POST { deny all; }
。
- 目录与文件防护
- 禁用自动目录索引:
autoindex off;
。 - 限制敏感文件访问:
nginx">location ~* \.(conf|log|bak)$ { deny all; }
三、高级安全策略
1. 安全头部增强
- 添加以下响应头防御XSS/点击劫持等攻击:
nginx">add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";
add_header Content-Security-Policy "default-src 'self'";
- 使用X-XSS-Protection启用浏览器XSS过滤。
2. 模块与日志管理
- 禁用未使用的模块(如autoindex)减少攻击面。
- 启用访问日志和错误日志,配置log_format记录关键字段(如客户端IP、请求时间)。
四、运维规范
1. 配置与漏洞管理
- 系统级防护
- 结合防火墙限制仅开放必要端口(如80/443)。
- 通过chmod设置配置文件权限(如nginx.conf设为640)。
以上配置需结合业务场景调整,建议使用nginx -t验证语法后分阶段实施。定期通过漏洞扫描工具(如CVE数据库)检查已知漏洞。
五、Nginx 生产环境标准配置方案
一、核心参数配置
1. 进程与连接控制
nginx">worker_processes auto; # 自动匹配CPU核心数 :ml-citation{ref="1,3" data="citationList"}
worker_cpu_affinity auto; # CPU亲和性优化(需Nginx 1.9+):ml-citation{ref="1,3" data="citationList"}
worker_rlimit_nofile 65535; # 进程最大文件句柄数 :ml-citation{ref="3,4" data="citationList"}
events { use epoll; # 高性能I/O模型(Linux环境):ml-citation{ref="1,3" data="citationList"} worker_connections 65535; # 单进程最大并发连接数 :ml-citation{ref="1,3" data="citationList"} multi_accept on; # 允许同时接受新连接 :ml-citation{ref="3,4" data="citationList"}
}
2. HTTP基础参数
nginx">http { client_max_body_size 20m; # 文件上传大小限制 :ml-citation{ref="4" data="citationList"} client_header_buffer_size 4k; # 请求头缓冲区 :ml-citation{ref="1,3" data="citationList"} keepalive_timeout 65s; # 长连接超时 :ml-citation{ref="2,4" data="citationList"} sendfile on; # 启用高效传输模式 :ml-citation{ref="3,4" data="citationList"} tcp_nopush on; # 减少网络报文数量 :ml-citation{ref="3,4" data="citationList"}
}
二、安全配置规范
1. 信息隐藏与访问控制
nginx">server_tokens off; # 隐藏Nginx版本号 :ml-citation{ref="1,2" data="citationList"}
add_header Server "Custom"; # 自定义Server头(需headers-more模块):ml-citation{ref="4,8" data="citationList"} location /nginx_status { allow 192.168.1.0/24; # 限制状态接口IP访问 :ml-citation{ref="5,6" data="citationList"} deny all;
}
2. SSL/TLS优化
nginx">ssl_protocols TLSv1.2 TLSv1.3; # 禁用旧协议 :ml-citation{ref="1,3" data="citationList"}
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on; # 优先服务端加密套件 :ml-citation{ref="1,3" data="citationList"}
ssl_session_cache shared:SSL:10m; # 会话缓存复用 :ml-citation{ref="3,4" data="citationList"}
三、性能优化策略
1. 资源缓存与压缩
nginx">gzip on; # 启用GZIP压缩 :ml-citation{ref="2,4" data="citationList"}
gzip_min_length 1k; # 最小压缩文件大小 :ml-citation{ref="2,4" data="citationList"}
open_file_cache max=1000 inactive=20s; # 文件元数据缓存 :ml-citation{ref="3,4" data="citationList"} proxy_cache_path /data/cache levels=1:2 keys_zone=mycache:10m; # 反向代理缓存 :ml-citation{ref="4" data="citationList"}
2. 负载均衡配置
nginx">upstream backend { server 10.0.0.1:80 weight=5; # 权重分配 :ml-citation{ref="3,4" data="citationList"} server 10.0.0.2:80 backup; # 备用节点 :ml-citation{ref="3,4" data="citationList"} keepalive 32; # 长连接复用 :ml-citation{ref="4" data="citationList"} check interval=3000 rise=2 fall=3 timeout=1000; # 健康检查(需nginx_upstream_check模块):ml-citation{ref="6" data="citationList"}
}
四、运维管理标准
1. 日志与监控
nginx">log_format main '$remote_addr - $request_time - "$request" $status'; # 自定义日志格式 :ml-citation{ref="2,3" data="citationList"}
access_log /var/log/nginx/access.log main buffer=32k flush=5m; # 缓冲写入日志 :ml-citation{ref="4" data="citationList"}
error_log /var/log/nginx/error.log warn; # 错误日志级别控制 :ml-citation{ref="3,4" data="citationList"}
2. 系统级加固
实施说明
- 配置更新后必须执行 nginx -t 测试语法
- 推荐使用 logrotate 实现日志自动切割
- 生产环境建议采用 OpenResty 增强功能(如动态WAF)
七、配置样例:
标准配置
worker_processes auto;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log warn;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}
}
生产环境优化建议:
- 增加并发连接数:根据实际负载调整worker_connections。例如,如果服务器有16核CPU,可以设置为16384或更高。
- 启用Gzip压缩:减少传输数据量,提高页面加载速度。
- 配置HTTPS:增强安全性,使用TLS协议。
- 使用高效的日志格式:例如,使用json格式的日志,便于后续分析。
- 配置缓存:使用Nginx的proxy_cache或fastcgi_cache来缓存静态文件和动态内容。
- 负载均衡:在多个服务器之间分发请求,使用Nginx的upstream模块。
- 安全性增强:配置HTTP头以增强安全性,例如X-Frame-Options、Content-Security-Policy等。
- 监控和告警:设置监控和告警机制,以便及时发现并解决问题。
- 性能调优:调整keepalive_timeout、client_max_body_size等参数以适应高并发场景。
- 使用高效的第三方模块:例如ngx_pagespeed、ngx_brotli等。
优化后的配置示例:
worker_processes auto; # 基于CPU核心数自动设置工作进程数,通常设置为CPU核心数或2倍CPU核心数。
pid /var/run/nginx.pid; # 设置nginx进程ID文件路径。
worker_rlimit_nofile 16384; # 设置单个工作进程可以打开的最大文件描述符数量。
events {worker_connections 16384; # 根据实际负载调整并发连接数。multi_accept on; # 允许每个工作进程同时接受多个新连接。
}
http {... # 其他配置保持不变。gzip on; # 启用Gzip压缩。gzip_types text/plain application/xml text/css application/javascript application/json application/x-javascript text/xml application/xml+rss text/javascript; # 设置需要压缩的MIME类型。... # 其他配置保持不变。server {listen 80 default_server; # 监听80端口,并设置为默认服务器。listen 443 ssl default_server; # 监听443端口,并启用SSL加密,设置为默认服务器。server_name localhost; # 根据实际域名设置。ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; # SSL证书路径。ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; # SSL私钥路径。ssl_session_cache shared:SSL:1m; # 设置SSL会话缓存。ssl_session_timeout 5m; # 设置SSL会话超时时间。... # 其他配置保持不变。location / { ... } # 其他location配置保持不变。... # 其他配置保持不变。}