在Nginx安全加固这件事上,有几个关键点值得拿出来细说。
先聊聊隐藏版本号这招。通过server_tokens off;指令,把Nginx响应头里的版本号藏起来——攻击者想根据版本信息搞针对性攻击,这下连门都摸不着。更绝的是,可以借助headers-more-nginx-module模块,直接把Server: nginx这个标识彻底抹掉,信息泄露的风险再降一档。

严格访问控制与权限管理
- IP访问限制:用
allow/deny指令,把敏感接口(比如后台管理页面)的访问范围框死——只允许可信IP段进来,其他人想都别想。 - 低权限运行:别用root用户启动Nginx,通过
user指令指定一个普通用户(比如nginx),权限越小,被人钻空子的可能性就越低。 - 敏感目录防护:先关掉自动目录索引(
autoindex off;),免得目录结构直接曝光。再用location指令把.conf、.log、.bak这类敏感文件锁死,比如location ~* .(conf|log|bak)$ { deny all; },直接拒绝一切访问。
SSL/TLS加密与协议强化
- 启用强加密协议:像SSLv2、SSLv3这种老掉牙的协议,直接关掉。优先用TLS 1.3(
ssl_protocols TLSv1.3;),数据传输安全性立刻上一个台阶。 - 配置安全加密套件:选那些支持前向保密的套件,比如
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;,再配上ssl_prefer_server_ciphers on;,让服务器优先用强套件,不给中间人留机会。 - 强制HTTPS跳转:通过
return 301 https://$host$request_uri;,把HTTP流量一股脑儿全转到HTTPS,明文传输?不存在的。 - 启用HSTS:加上
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";,浏览器收到这个头部,以后只会用HTTPS连你,降级攻击自动失效。
请求限制与防DDoS攻击
- 并发连接限制:用
limit_conn_zone定义一块共享内存(比如limit_conn_zone $binary_remote_addr zone=addr:10m;),然后limit_conn addr 1;——单个IP最多同时连一个请求,想用大量连接搞垮你?门都没有。 - 请求速率限制:
limit_req_zone上场(比如limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=1r/s;),再配合limit_req zone=req_limit_per_ip burst=5;,允许突发5个请求,但超过这个量就直接拒绝,CC/DDoS攻击基本被拦在门外。 - 超时设置:调整
client_body_timeout、client_header_timeout、keepalive_timeout这些参数,比如都设成10s、10s、5s,闲置连接快速释放,资源消耗自然降下来。
安全头部增强
加几个响应头,常见Web攻击就很难近身了:
add_header X-Content-Type-Options "nosniff";—— 禁止浏览器自作主张搞MIME类型嗅探。add_header X-Frame-Options "SAMEORIGIN";—— 防止点击劫持,别人想用iframe把你页面套走?不行。add_header Content-Security-Policy "default-src 'self';";—— 只加载同源资源,XSS攻击的源头就被卡死了。add_header X-XSS-PROTECTION "1; mode=block";—— 开启浏览器自带的XSS过滤器,发现攻击直接拦截。
模块与日志管理
- 禁用未使用模块:编译Nginx时,把不需要的模块(比如
autoindex、status)统统去掉,攻击面越小越好。 - 日志记录与监控:配置详细的
access_log和error_log,记下客户端IP、请求时间、状态码这些关键信息。定期翻翻日志,异常请求一眼就能看出来。
系统级防护与运维规范
- 防火墙配置:用
iptables或firewalld只开放80、443这种必要端口,非法IP想进来?先问问防火墙答不答应。 - 配置文件权限:把
nginx.conf的权限设成640(所有者可读写,组用户可读),敏感信息不会轻易泄露。 - 定期更新与漏洞修复:及时升级到最新稳定版,用
nginx -V检查编译参数,确认没带上高危模块。 - 备份与恢复:定期备份Nginx配置文件和网站数据——万一被攻击了,恢复起来也能快人一步。