< 返回

在nginx中根据用户真实IP进行限制

2024-11-19 17:30 作者:xiao gang 阅读量:143

在 NGINX 中根据用户的真实 IP 进行限制,可以通过配置 geo 模块和 http 相关的配置来实现。以下是一个基本的步骤和示例:

步骤

  1. 获取真实 IP: 如果 NGINX 后面有反向代理(如 Cloudflare、nginx-proxy 等),需要确保能够获取到用户的真实 IP。你需要配置 real_ip 模块。

  2. 配置 geo 模块: 使用 geo 指令来定义一个变量,该变量可以根据 IP 地址进行限制。

  3. 配置访问控制: 使用 limit_req 或 deny 指令根据真实 IP 进行限制。

示例配置

以下是一个基本的示例配置,限制某个 IP 地址的请求速率,并允许通过 X-Forwarded-For 获取到真实的客户端 IP。

http {
    # 开启 real_ip 模块以获取真实 IP
    set_real_ip_from  192.0.2.0;  # 反向代理服务器的 IP
    set_real_ip_from  203.0.113.0; # 反向代理服务器的 IP
    real_ip_header    X-Forwarded-For;

    # 定义一个限制请求速率的区域
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    server {
        listen 80;
        server_name example.com;

        location / {
            # 应用请求速率限制
            limit_req zone=one burst=5 nodelay;

            # 处理请求的其他配置
            proxy_pass http://backend;
        }

        # 拒绝某些 IP 地址
        deny 192.0.2.100;  # 拒绝特定 IP 地址
        allow all;         # 允许所有其他 IP
    }
}

说明

  1. set_real_ip_from: 这条指令用于告诉 NGINX 哪些 IP 地址是可信的代理。如果你的 NGINX 服务器前面有负载均衡器或 CDN,确保将它们的 IP 添加到这里。

  2. real_ip_header: 指定从哪个 HTTP 头获取真实的客户端 IP,这里使用的是 X-Forwarded-For。

  3. limit_req_zone: 定义一个请求限速区域,$binary_remote_addr 是用户的真实 IP 地址。这里设置为每秒一个请求,最大突发请求为 5 个。

  4. limit_req: 在 location 块中应用请求限制。

  5. deny 和 allow: 可以根据 IP 地址拒绝或允许访问。

注意事项

  • 确保你的 NGINX 配置文件无误,并使用 nginx -t 命令检查配置。

  • 重新加载 NGINX 配置,使用 nginx -s reload。

  • 根据你的实际需求调整速率限制和允许/拒绝的 IP 地址。

这样配置后,NGINX 就可以根据用户的真实 IP 进行请求限制。

联系我们
返回顶部