Nginx - 基于 IP 范围的不同代理传递

Nginx - Different proxy pass based on IP ranges

我有一个案例,我需要在 Nginx 中执行不同的代理传递,具体取决于客户端 IP 地址所属的 CIDR。

例如,假设我有以下 CIDR:

  10.50.0.0/16
  10.51.0.0/16
  10.52.0.0/16

每个客户端地址在 Nginx 中都需要有不同的 proxy_pass。我该怎么做呢?我是 Nginx 的新手,所以实现这样的事情仍然有点令人困惑。

您可以使用 Geo module。你的配置看起来像这样:

geo $upstream  {
    default default_upstream;

    10.50.0.0/16 some_upstream;
    10.51.0.0/16 another_upstream;
}

upstream default_upstream {
    server 192.168.0.1:80;
}

upstream some_upstream {
    server 192.168.0.2:80;
}

upstream another_upstream {
    server 192.168.0.3:80;
}

server {
    ...
    location ... {
        ...
        proxy_pass http://$upstream;
    }
    ...
}