1. 隐藏服务器标识信息
通过server_tokens off;指令关闭Nginx版本号的返回,避免攻击者通过响应头识别服务器版本及潜在漏洞;进一步可使用headers-more-nginx-module模块彻底移除Server头部(如more_clear_headers Server;),减少信息泄露风险。
2. SSL/TLS加密与协议加固
启用TLS 1.3(最新安全协议)并禁用SSLv2/SSLv3等不安全协议(ssl_protocols TLSv1.3 TLSv1.2;);配置强加密套件(如ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; ssl_prefer_server_ciphers on;);强制HTTP跳转HTTPS(return 301 https://$host$request_uri;),并通过add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";启用HSTS,防止协议降级攻击。
3. 访问控制与连接限制
allow/deny指令限制敏感接口(如后台管理页面)的访问范围(如location /admin { allow 192.168.1.0/24; deny all; });limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m;定义IP连接数限制区域,再在server或location块中设置单IP最大连接数(如limit_conn conn_per_ip 100;),防止DDoS连接耗尽;limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;定义请求速率区域,配合limit_req zone=req_limit burst=20 nodelay;限制突发请求(如每秒最多10个请求,允许突发20个),抵御暴力破解或CC攻击。4. 防恶意请求与攻击
GET、POST、HEAD),通过limit_except指令拒绝其他方法(如location / { limit_except GET POST HEAD { deny all; } }),防止TRACE、DELETE等危险方法攻击;client_body_buffer_size(如16k)、client_header_buffer_size(如1k)、client_max_body_size(如10m)等参数,限制客户端请求体与头的大小,避免缓冲区溢出;alias指令替代root指定目录(如location /files { alias /var/www/data/; }),并通过deny all;禁止访问上级目录(如location ~ ^/(.*)/../ { deny all; }),防止通过../../../访问未授权文件;map指令匹配User-Agent中的关键词(如bot、scan),将恶意爬虫请求返回403(如map $http_user_agent $is_bot { default 0; "~*(bot|scan)" 1; } server { if ($is_bot) { return 403; } })。5. 敏感文件与目录防护
location指令匹配敏感文件类型(如.conf、.log、.bak、.sql),返回403或444(直接关闭连接)(如location ~* \.(conf|log|bak|sql)$ { deny all; return 444; });autoindex off;,防止目录无index文件时自动暴露文件列表。6. 安全头部增强
添加以下响应头防御常见Web攻击:
X-Content-Type-Options "nosniff":防止MIME类型嗅探攻击;X-Frame-Options "SAMEORIGIN":防止点击劫持(禁止页面嵌入iframe);Content-Security-Policy "default-src 'self'":限制资源加载来源(仅允许同域),防御XSS攻击;X-XSS-Protection "1; mode=block":启用浏览器XSS过滤。7. 权限与进程安全
user指令指定低权限用户(如nginx)和组(如nginx)运行Nginx(如user nginx nginx;),避免进程提权;nginx.conf)权限为640(所有者可读写,组可读),日志目录权限为750(所有者可读写执行,组可读执行),防止未授权访问。8. 日志与监控
开启访问日志(access_log /var/log/nginx/access.log combined;)和错误日志(error_log /var/log/nginx/error.log warn;),记录客户端IP、请求时间、方法、URI等关键信息;定期分析日志,通过fail2ban等工具自动封禁频繁攻击的IP。
9. 模块与版本管理
--without-http_*选项禁用未使用的模块(如--without-http_autoindex_module禁用自动目录列表),减少攻击面;