参考资料

  1. Nginx如何支持动态内容?
  2. 查看nginx 设置配置文件路径方法
  3. Nginx 基于SSL的TCP代理服务器详细说明以及案例
  4. Nginx如何支持高并发?
  5. nginx 配置ssl
  6. Nginx伪动态SSI服务器详细说明以及案例
  7. Nginx的功能特点说细说明
  8. NginxuWSGI模块配置详细说明以及案例
  1. DDoS攻击防御

  • 配置速率限制:

    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
  • 启用SYN Cookie防护

  1. HTTP Flood防护

  • 限制单个IP连接数:

    limit_conn conn_limit 5;
    limit_req zone=req_limit burst=20;
  1. 慢速攻击防护

  • 配置超时参数:

    client_body_timeout 10s;
    client_header_timeout 10s;
    keepalive_timeout 5 5;
  1. 恶意扫描防护

  • 屏蔽扫描工具User-Agent:

    if ($http_user_agent ~* (nmap|sqlmap|wget|curl|nikto)) {
      return 403;
    }
  1. 目录遍历防护

  • 禁用目录列表:

    autoindex off;
  1. SSRF防护

  • 限制访问内网:

    location ~* ^/(internal|admin) {
      deny 192.168.0.0/16;
      deny 10.0.0.0/8;
      allow all;
    }
  1. 配置错误利用防护

  • 隐藏版本信息:

    server_tokens off;
  1. WebShell防护

  • 限制PHP文件执行目录:

    location ~* \.php$ {
      fastcgi_pass unix:/var/run/php-fpm.sock;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      allow 192.168.1.0/24;
      deny all;
    }
  1. 实际案例配置

http {
    # 基础防护
    server_tokens off;
    autoindex off;

    # 连接限制
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;

    server {
        # 请求限制
        limit_conn conn_limit 5;
        limit_req zone=req_limit burst=20 nodelay;

        # 超时设置
        client_body_timeout 10s;
        client_header_timeout 10s;

        # 扫描防护
        if ($http_user_agent ~* (nmap|sqlmap)) {
            return 444;
        }

        # 敏感目录防护
        location /admin {
            allow 192.168.1.100;
            deny all;
        }
    }
}