一、核心安全配置(基础防护)
通过 Nginx 自身配置阻断常见安全风险,无需依赖第三方工具,是安全防护的基础环节。
-
隐藏 Nginx 版本号
- 风险:暴露版本号可能被攻击者利用特定版本漏洞发起攻击;
- 配置:在
nginx.conf的http块中添加server_tokens off;,重载后版本号不再显示(原响应Server: nginx/1.26.3变为Server: nginx); - 验证:通过
curl -I 服务器IP查看响应头。
-
限制危险 HTTP 请求方法
-
风险:PUT/DELETE(文件修改风险)、TRACE(XST 攻击)、CONNECT(代理滥用)等方法存在安全隐患,仅保留 GET/HEAD/POST 常用安全方法;
-
配置:在
server块中添加条件判断,非白名单方法返回 444(静默断开连接):nginx
if ($request_method !~ ^(GET|HEAD|POST)$) { return 444; } -
验证:用
curl -X PUT -I 服务器IP测试,返回空响应,日志记录 444 状态码。
-
-
CC 攻击防御(请求速率限制)
-
原理:CC 攻击通过大量合法请求耗尽服务器资源,利用
limit_req模块限制单 IP 请求速率; -
配置:在
http块定义共享内存区,server或location块绑定限制规则:nginx
# http块:定义10M内存区,单IP每秒最多10次请求 limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s; # location块:绑定限制,突发请求最多20个(等候区),超出返回503 limit_req zone=req_limit burst=20 nodelay; -
验证:用
ab -n 300 -c 30 服务器IP压力测试,日志中大量请求返回 503,说明限制生效。
-
-
防盗链配置
-
风险:防止其他网站盗用本网站静态资源(图片、CSS、JS),避免带宽浪费和版权侵权;
-
原理:基于
referer字段判断请求来源,仅信任指定域名; -
配置:在
location块中匹配静态资源后缀,设置信任域名,非信任来源返回 403:nginx
location ~*\.(jpg|png|gif|css|js)$ { root html; valid_referers aaa.com *.aaa.com; # 信任的源域名 if ($invalid_referer) { return 403; } } -
验证:盗链网站访问目标资源时返回 403,原网站正常访问。
-
二、高级防护(进阶安全机制)
- 动态黑名单
-
优势:无需重启 Nginx 即可实时更新封禁 IP / 网段,比静态
allow/deny更灵活,适用于拦截恶意 IP; -
配置步骤:
-
创建黑名单文件
blockips.conf,格式为IP/网段 封禁动作码(0 = 允许,1=403,2=444,3=503):plaintext
192.168.10.102 1; # 封禁单个IP,返回403 192.168.1.0/24 1; # 封禁整个网段 -
在
http块中通过geo模块引入黑名单,server块中触发封禁:nginx
http { geo $block_ip { default 0; # 默认允许 include /usr/local/nginx/conf/blockips.conf; } server { if ($block_ip) { return 403; } } }
-
-
自动封禁:编写 Shell 脚本,统计日志中访问超过 100 次的 IP,自动添加到黑名单文件,可通过定时任务执行。
-
三、HTTPS 部署实战(加密通信)
HTTPS 是HTTP+SSL/TLS的加密通信协议,解决 HTTP 明文传输的窃听、篡改、冒充风险,核心遵循机密性、完整性、身份认证、不可否认四大安全原则。
-
HTTPS 核心原理
- 混合加密模式:握手阶段用非对称加密 (公钥 / 私钥)协商会话密钥,数据传输阶段用对称加密(会话密钥)加密数据(兼顾安全性和效率);
- 信任机制:通过 CA 证书验证服务器身份,避免公钥被中间人调包,客户端内置信任的根 CA 证书,用于验证服务器证书合法性。
-
自签名证书生成(测试环境)
-
生产环境需使用 Let's Encrypt、DigiCert 等权威 CA 证书,测试环境可生成自签名证书: bash
运行
# 创建证书存储目录 mkdir -p /etc/nginx/ssl # 生成2048位RSA私钥和自签名证书(有效期1年) openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/nginx-selfsigned.key \ -out /etc/nginx/ssl/nginx-selfsigned.crt \ -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=localhost"
-
-
Nginx 启用 HTTPS
- 配置步骤:
-
在
nginx.conf中添加 HTTPS 服务块,监听 443 端口,指定证书和私钥路径:nginx
# HTTPS服务配置 server { listen 443 ssl; server_name localhost; # 证书和私钥路径 ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt; ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key; # 启用安全的TLS协议和加密套件 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 reload;
-
- 浏览器验证:访问
https://服务器IP,因自签名证书未被信任会提示警告,选择 "信任" 后可正常访问,地址栏显示锁形图标。
- 配置步骤:
四、本章核心总结
- Nginx 安全防护分为基础配置和高级防护:基础配置聚焦隐藏版本、限制请求方法、防御 CC 攻击、防盗链,快速阻断常见风险;高级防护通过动态黑名单实现实时恶意 IP 拦截,适配复杂攻击场景;
- HTTPS 是 Web 服务安全的核心,通过混合加密模式保障数据传输安全,CA 证书解决身份认证问题,自签名证书适用于测试,生产环境需使用权威 CA 证书;
- 所有安全配置需结合实际业务场景调整(如请求速率限制、信任域名),配置后需通过命令或浏览器验证生效,同时建议结合日志监控异常请求,持续优化防护策略;
- 部署 HTTPS 后可提升网站可信度,适配 HTTP/2 协议,同时满足搜索引擎(如 Google)和主流平台(如微信小程序、App Store)的安全要求。