如何通过Nginx提高网站安全性
小樊
40
2025-11-22 06:25:29
Nginx 安全加固实用清单
一 基础防护与信息泄露控制
- 隐藏版本与标识:在 http/server 块设置 server_tokens off;,必要时使用第三方模块(如 headers-more-nginx-module)移除或替换 Server 响应头,避免暴露 Nginx 版本与运行环境信息。
- 禁用目录列表与 SSI:对所有 location 明确 autoindex off;,对不需要的 SSI 关闭(ssi off;),防止目录遍历与服务器端包含带来的信息泄露与代码执行风险。
- 限制敏感方法与请求特征:仅开放必要的 GET/POST 等,禁用 TRACE/TRACK 等危险方法;对包含可疑字符(如 ; ’ < >)的 URI/查询串 直接断开连接(返回 444);对包含 …/ 的路径统一拒绝;对敏感路径(如 /admin|backup|config|db|src/)直接 deny all;。
- 示例片段:
- 禁用方法与可疑字符拦截
limit_except GET POST { deny all; }
if ($request_uri ~* “[;'<>]”) { return 444; }
if ($args ~* “[;'<>]”) { return 444; }
location ~ /../ { deny all; }
location ~* /(admin|backup|config|db|src)/ { deny all; }
- 目录与 SSI
autoindex off;
ssi off;
以上措施可显著降低攻击面并阻断常见探测与利用路径。
二 传输加密与协议安全
- 全站 HTTPS 与强制跳转:监听 443 ssl 并配置证书;将 80 端口重定向到 443,确保数据在传输过程中全程加密,降低窃听与篡改风险。
- 协议与套件:仅启用 TLSv1.2/TLSv1.3,禁用 SSLv2/SSLv3/TLSv1.0/TLSv1.1;使用强加密套件并开启 ssl_prefer_server_ciphers on;,优先由服务器选择更安全的密码套件。
- HSTS 与浏览器安全头:启用 Strict-Transport-Security(如:max-age=31536000; includeSubDomains; preload),并配合 X-Frame-Options SAMEORIGIN、X-XSS-Protection “1; mode=block”、X-Content-Type-Options nosniff、Content-Security-Policy(按站点策略定制)等头部,增强浏览器端防护。
- 示例片段:
- 强制 HTTPS 与 HSTS
server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
server { listen 443 ssl; server_name example.com;
ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
add_header Strict-Transport-Security “max-age=31536000; includeSubDomains; preload” always;
add_header X-Frame-Options “SAMEORIGIN”; add_header X-XSS-Protection “1; mode=block”;
add_header X-Content-Type-Options “nosniff”;
add_header Content-Security-Policy “default-src ‘self’; script-src ‘self’ ‘unsafe-inline’”; }
以上配置可有效抵御降级攻击与常见 Web 前端漏洞利用。
三 访问控制与速率限制
- IP 白名单/黑名单:对管理后台等敏感路径使用 allow/deny 控制来源,仅允许受信任 IP 访问,其余一律拒绝。
- 认证与访问控制:对敏感接口启用 HTTP Basic Auth(auth_basic/auth_basic_user_file),作为纵深防御手段。
- 请求速率与并发限制:使用 limit_req_zone/limit_req 限制单位时间请求数,使用 limit_conn_zone/limit_conn 限制单 IP 并发连接数,缓解 DoS/暴力扫描 与爬虫滥用。
- 超时与缓冲控制:合理设置 client_body_timeout、client_header_timeout、keepalive_timeout、send_timeout 与 client_max_body_size,降低慢速攻击与资源耗尽风险。
- 示例片段:
- IP 白名单与基础认证
location /admin/ { allow 192.168.1.0/24; deny all; auth_basic “Restricted”; auth_basic_user_file /etc/nginx/.htpasswd; }
- 速率与并发限制(需在 http 块先定义共享内存区)
limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;
server {
limit_req zone=req burst=20 nodelay; limit_conn conn 10;
client_max_body_size 10m; keepalive_timeout 5 5; send_timeout 10; }
以上策略在保障可用性的同时,有效抑制滥用与资源型攻击。
四 运行环境与运维安全
- 最小权限与进程隔离:以 非 root 用户运行 Nginx(配置 user 指令),仅开放必要端口(如 80/443),系统防火墙仅放行必要流量。
- 文件与目录权限:限制配置文件权限(如 /etc/nginx/nginx.conf 640),静态资源与上传目录分离并设置不可执行权限,避免上传 webshell。
- 更新与依赖管理:及时升级 Nginx 与相关组件,关注安全公告与 CVE,保持修复节奏与版本一致性。
- 配置审计与语法校验:使用 nginx -t 验证配置,变更通过 nginx -s reload 热加载;定期用 nginx -V 检查编译参数与启用模块;使用 Gixy 等工具检测典型配置安全问题。
- 日志与监控告警:启用 access/error 日志,结构化记录关键字段(如 客户端IP、请求方法、URI、状态码、UA、响应时间),结合 SIEM/告警 做异常检测与取证。
- 示例片段:
- 最小权限与端口
user www-data;
events { worker_connections 4096; }
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; }
- 安全运维流程
校验与热加载
sudo nginx -t && sudo nginx -s reload
版本与模块检查
sudo nginx -V
配置安全扫描
gixy /etc/nginx/nginx.conf
以上实践可提升可运维性与可观测性,缩短故障与入侵发现时间。