避免使用root用户运行Nginx
在Linux系统中,root用户拥有最高权限,若Nginx进程以root身份运行,一旦攻击者利用Nginx漏洞(如缓冲区溢出)获取权限,可直接控制系统全权限,建议创建专门的低权限用户(如nginx)运行Nginx,通过user指令配置(如user nginx nginx;),并确保该用户仅拥有必要的文件读取和执行权限,最小化安全风险。

定期更新Nginx版本及依赖组件
Nginx官方会定期修复安全漏洞(如CVE-2021-23017、CVE-2021-23018等),未及时更新的版本可能被利用进行远程代码执行、信息泄露等攻击,需关注Nginx官方安全公告,通过yum update nginx(CentOS/RHEL)或apt-get update && apt-get upgrade nginx(Debian/Ubuntu)更新至最新稳定版,需更新OpenSSL、pcre等依赖组件,避免因第三方库漏洞引发安全问题。
配置安全的SSL/TLS协议与加密套件
启用HTTPS时,需禁用不安全的SSLv2、SSLv3协议(存在POODLE漏洞)及TLS 1.0/1.1(存在BEAST、POODLE-TLS等漏洞),仅保留TLS 1.2及以上版本,通过ssl_protocols TLSv1.2 TLSv1.3;配置加密套件时,避免使用弱加密算法(如DES、RC4、3DES)及MD5、SHA1等哈希算法,推荐使用ECDHE-RSA-AES256-GCM-SHA384等强套件,可通过ssl_ciphers指令自定义优先级。
隐藏Nginx版本信息及敏感错误详情
默认情况下,Nginx会在错误页面和HTTP响应头中返回版本信息(如Server: nginx/1.18.0),攻击者可利用版本信息匹配已知漏洞,需通过server_tokens off;隐藏版本号,同时避免在error_page中返回详细错误信息(如文件路径、代码行数),改用自定义错误页面,
error_page 404 /404.html; error_page 500 502 503 504 /50x.html;
限制HTTP方法,禁用危险方法
HTTP协议中的TRACE方法可能引发跨站追踪攻击(XST),PUT、DELETE等方法若未严格控制,可能导致服务器文件被篡改或删除,需通过limit_except指令限制允许的方法,仅保留GET、POST、HEAD等必要方法,
location /admin/ {
limit_except GET POST {
deny all;
}
}
配置安全的访问控制与IP白名单
通过allow和deny指令限制特定IP访问,尤其是管理后台、API接口等敏感路径,仅允许内网IP访问管理页面:

location /admin/ {
allow 192.168.1.0/24;
deny all;
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
结合HTTP基本认证(auth_basic)和密码文件(htpasswd生成)增强身份验证,避免弱密码或默认密码。
防范DDoS攻击与暴力破解
通过limit_conn和limit_req模块限制连接频率和请求速率,防止单一IP发起DDoS攻击或暴力破解,限制每个IP每秒最多10个请求,单个IP并发连接不超过5个:
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;
server {
location /login/ {
limit_conn conn_limit_per_ip 5;
limit_req zone=req_limit_per_ip burst=20 nodelay;
}
}
结合fail2ban工具,监控Nginx错误日志,自动封禁恶意IP(如频繁失败登录请求)。
禁用不必要的模块与危险指令
Nginx默认编译的模块可能包含未使用的功能(如autoindex模块、server_tokens),需通过nginx -V查看已加载模块,注释或删除不需要的模块(如--without-http_autoindex_module),禁用危险指令:
autoindex on;:禁止目录浏览,避免文件结构泄露;ssi on;和ssi_silent_errors on;:谨慎使用SSI(服务器端包含),防止命令注入;proxy_set_header X-Forwarded-For $remote_addr;:避免信任客户端传递的X-Forwarded-For头部,防止IP伪造。
配置安全的文件上传与目录权限
若业务涉及文件上传(如头像、附件),需严格限制上传目录的执行权限,防止上传恶意脚本(如.php、.jsp文件)并被执行,通过location匹配上传路径,禁用PHP等解析引擎:

location ~* \.(php|jsp|asp)$ {
deny all;
}
location /uploads/ {
root /var/www;
autoindex off;
client_max_body_size 10M;
if ($request_filename ~* \.(php|jsp)$) {
return 403;
}
}
确保上传目录权限为755,文件权限为644,避免写入权限过大。
启用日志监控与安全审计
详细记录Nginx访问日志和错误日志,便于追溯攻击行为,通过log_format自定义日志格式,包含IP、时间、请求方法、URI、HTTP状态码、User-Agent等关键信息:
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;
结合ELK(Elasticsearch、Logstash、Kibana)或Graylog等日志分析系统,实时监控异常访问(如大量404错误、高频请求IP),及时发现并处置安全威胁。
通过以上10个安全提示,可系统性地提升Nginx服务器的安全性,降低被攻击风险,需结合业务场景持续优化配置,并定期进行安全审计与漏洞扫描,构建纵深防御体系。



















