
前言在互联网高速发展的今天Web 服务安全已成为企业与开发者必须重视的核心问题。Nginx 凭借轻量、高并发、模块化设计占据全球近三分之一 Web 服务器市场。但 DDoS、CC 攻击、恶意爬虫、SQL 注入等威胁层出不穷加之 GDPR、等保 2.0 等法规要求掌握 Nginx 安全加固与 HTTPS 部署已是运维与开发人员的必备技能。一、Nginx 核心安全配置生产必配1. 编译安装 Nginx安全基础生产环境不推荐 yum 直接安装编译安装可按需开启模块、关闭危险功能安全性更高。1安装依赖包dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker git wget tar2创建专用运行用户最小权限原则禁止 nginx 使用 root 运行降低入侵后风险useradd -M -s /sbin/nologin nginx mkdir -p /var/log/nginx chown -R nginx:nginx /var/log/nginx3编译配置开启安全必备模块tar zxf nginx-1.26.3.tar.gz cd nginx-1.26.3 ./configure \ --prefix/usr/local/nginx \ --usernginx \ --groupnginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream make make install4创建软链接、配置系统服务ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/新建 systemd 服务文件vi /lib/systemd/system/nginx.service写入内容[Unit] DescriptionThe NGINX HTTP and reverse proxy server Afternetwork.target [Service] Typeforking ExecStartPre/usr/local/sbin/nginx -t ExecStart/usr/local/sbin/nginx ExecReload/usr/local/sbin/nginx -s reload ExecStop/bin/kill -s QUIT $MAINPID TimeoutStopSec5 KillModeprocess PrivateTmptrue Userroot Grouproot [Install] WantedBymulti-user.target启动并设置开机自启systemctl daemon-reload systemctl start nginx systemctl enable nginx2. 隐藏 Nginx 版本号防版本定向攻击攻击者可通过版本号查找对应 CVE 漏洞生产环境必须隐藏。查看版本号curl -I 192.168.10.101 # 返回Server: nginx/1.26.3关闭版本显示vi /usr/local/nginx/conf/nginx.conf在http块中添加http { server_tokens off; }重载配置nginx -t nginx -s reload再次验证curl -I 192.168.10.101 # 返回Server: nginx无版本号3. 限制危险 HTTP 请求方法HTTP 中PUT/DELETE/CONNECT/TRACE等方法存在高危风险PUT/DELETE可上传 / 删除文件TRACE易导致 XST 攻击CONNECT可被用于代理滥用只放行GET/HEAD/POST其他直接返回 444 断开连接。配置server { ... if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } }测试curl -XPUT -I 192.168.10.101 # 返回 Empty reply from server注意TRACE/CONNECT 会被 Nginx 核心层直接拦截返回 405/400不会进入 if 判断。4. 请求限制CC 攻击防御核心CC 攻击通过海量请求耗尽服务器资源Nginx 自带limit_req模块可精准限速。配置请求速率限制http { # 定义限流区域10M内存按IP限速10请求/秒 limit_req_zone $binary_remote_addr zonereq_limit:10m rate10r/s; server { location / { root html; index index.html; # 突发队列20不延迟直接处理 limit_req zonereq_limit burst20 nodelay; } } }关键参数说明limit_req_zone定义共享内存存储 IP 访问状态$binary_remote_addr以客户端 IP 为维度限流rate10r/s每秒最多 10 个请求burst20缓冲队列超出速率的请求排队nodelay队列请求立即处理否则会延迟返回压力测试验证安装 ab 工具dnf install httpd-tools -y发起 300 请求30 并发ab -n 300 -c 30 http://192.168.10.101/查看日志tail -300 /usr/local/nginx/logs/access.log | grep -c 503大量请求返回 503限流生效。5. 防盗链配置保护静态资源盗链会消耗服务器带宽、侵犯版权Nginx 可通过referer机制拦截。实验环境源站www.aaa.com 192.168.10.101盗链站www.bbb.com 192.168.10.102配置防盗链location ~* \.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|webp|ico)$ { root html; # 信任域名 valid_referers aaa.com *.aaa.com; # 非法referer返回403 if ($invalid_referer) { return 403; } }配置后盗链网站直接显示图片 403防护生效。二、Nginx 高级防护进阶安全1. 动态黑名单实时封禁恶意 IP静态allow/deny需要重启服务动态黑名单可热加载无需重启。1创建黑名单文件vi /usr/local/nginx/conf/blockips.conf写入192.168.1.0/24 1; 192.168.10.102 1;数字含义0允许1返回 403 封禁2返回 444 断开3返回 5032主配置加载http { geo $block_ip { default 0; include /usr/local/nginx/conf/blockips.conf; } server { if ($block_ip) { return 403; } } }重载nginx -t nginx -s reload3自动封禁高频 IP 脚本#!/bin/bash awk {print $1} /var/log/nginx/access.log | sort | uniq -c | sort -nr | awk {if($1100) print $2 1;} /usr/local/nginx/conf/blockips.conf访问量超 100 的 IP 自动加入黑名单配合定时任务使用。三、Nginx HTTPS 部署全站加密1. HTTPS 核心原理HTTPS HTTP SSL/TLS解决 HTTP 三大风险窃听风险明文传输可被截取篡改风险数据被中间人修改冒充风险访问钓鱼网站HTTPS 采用混合加密握手阶段非对称加密公钥 / 私钥交换会话密钥传输阶段对称加密加密业务数据效率更高数字证书解决公钥信任问题由 CA 机构签名系统内置根证书信任。2. 生成自签名证书测试环境生产请使用 Let’s Encrypt、DigiCert 等正规 CA 证书。mkdir -p /etc/nginx/ssl openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx-selfsigned.key -out /etc/nginx/ssl/nginx-selfsigned.crt -subj /CCN/STBeijing/LBeijing/OMyOrg/CNlocalhost3. Nginx 配置 HTTPSserver { listen 443 ssl; server_name localhost; # 证书路径 ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt; ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key; # 安全协议与加密套件 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; location / { root /usr/local/nginx/html; index index.html; } } # HTTP强制跳转HTTPS server { listen 80; server_name localhost; return 301 https://$host$request_uri; }重载配置nginx -t nginx -s reload4. 验证 HTTPS访问https://服务器IP浏览器提示证书不安全自签名测试环境可忽略。生产环境使用受信任证书后浏览器显示安全锁支持 HTTP/2SEO 权重更高。四、生产环境安全加固总结最小权限使用专用 nginx 用户禁止 root 运行隐藏信息关闭版本号、隐藏服务器信息请求限流limit_req 防 CClimit_conn 防并发过量方法限制只放行 GET/HEAD/POST防盗链保护静态资源减少带宽浪费动态黑名单实时封禁恶意 IP全站 HTTPS开启 TLS1.2禁用不安全协议定期更新Nginx 保持最新版修复 CVE 漏洞五、结语Nginx 安全防护不是一次性配置而是持续优化的过程。本文覆盖的编译加固、版本隐藏、请求限流、防盗链、动态黑名单、HTTPS 部署可直接应用于中小企业生产环境大幅提升 Web 服务安全性。