nginx对代理IP进行白名单配置,主要解决请求的IP都是代理IP,无法进行白名单过滤

有时在配置白名单不生效的情况,实际因为请求的都是IP都是代理IP。

访问服务器的 IP(例如 192.168.1.100)是一个代理 IP,需要通过这个代理 IP 访问的真实客户端 IP(即代理后面的 IP)进行白名单限制。这通常涉及反向代理场景,真实客户端 IP 通常会通过 HTTP 头(如 X-Forwarded-For)传递过来。

在这种情况下,Nginx 需要从代理传来的请求头中提取真实客户端 IP,然后基于这个 IP 进行白名单限制。以下是具体实现方案:

前提

  • 代理服务器(192.168.1.100)会在请求中添加 X-Forwarded-For 头,包含真实客户端 IP。
  • 如果代理没有添加这个头,你需要确保代理正确配置。

1、使用 real_ip 模块提取真实 IP

Nginx 的 ngx_http_realip_module 可以从请求头中提取真实客户端 IP。你需要确保 Nginx 编译时包含了这个模块(大多数发行版默认包含)。

2、编辑 Nginx 配置文件

nginx.conf
http {
    # 定义信任的代理 IP(即 192.168.1.100)
    set_real_ip_from 192.168.1.100;
    # 可定义多个IP
    set_real_ip_from 192.168.2.100

    # 从 X-Forwarded-For 头中提取真实 IP
    real_ip_header X-Forwarded-For;

    server {
        listen 80;
        server_name yourdomain.com;

        location / {
            # 白名单:只允许特定真实客户端 IP 或网段
            allow 10.0.0.0/16;    # 示例:允许 10.0.0.0 - 10.0.255.255
            allow 172.16.0.0/12;  # 示例:允许 172.16.0.0 - 172.31.255.255

            # 拒绝所有其他 IP
            deny all;

            # 其他配置
            root /var/www/html;
            index index.html;
        }
    }
}

3、重启进行测试,是否白名单生效

nginx -t
nginx -s reload

  • 发送测试请求:
    curl -H "X-Forwarded-For: 10.0.0.10" --interface 192.168.1.100 http://yourdomain.com

4、工作原理

  • set_real_ip_from 192.168.1.100;:告诉 Nginx,来自 192.168.1.100 的请求是可信的代理请求。
  • real_ip_header X-Forwarded-For;:指示 Nginx 从 X-Forwarded-For 头中提取真实客户端 IP。
  • allow 和 deny:基于提取的真实 IP 进行白名单限制。

5、示例请求

  • 请求头
    X-Forwarded-For: 10.0.0.5, 192.168.1.100
  • Nginx 会提取 10.0.0.5 作为真实客户端 IP,并检查它是否在白名单中。
posted @ 2025-03-12 18:01  风士兮  阅读(475)  评论(0)    收藏  举报