基于源IP的Nginx-TCP流路由

基于源IP的Nginx-TCP流路由,nginx,tcp,Nginx,Tcp,我已经将nginx配置为TCP(非http)流的反向代理。 我想为一个特定的源IP地址应用不同的路由-这可以做到吗,以及如何做到?我知道使用if指令对http模块进行了推荐,但这似乎不适用于这些流 现有配置: stream { server { listen 8000; proxy_pass staging; } } upstream staging { server 1.2.3.4:8000; } 所需配置(不工作): 这会出现错误“24314#24314:

我已经将nginx配置为TCP(非http)流的反向代理。 我想为一个特定的源IP地址应用不同的路由-这可以做到吗,以及如何做到?我知道使用if指令对http模块进行了推荐,但这似乎不适用于这些流

现有配置:

stream {
  server {
    listen 8000;
    proxy_pass staging;
  }
}

upstream staging {
    server 1.2.3.4:8000;
}
所需配置(不工作):


这会出现错误“24314#24314:”如果“此处不允许使用指令”,因为它不适用于流模块-是否有其他功能可以实现此结果?

如果有些人仍然怀疑您可以使用地图实现此目的:

stream {
  upstream staging1 {
    server 1.2.3.4:8000;
  }

  upstream staging2 {
    server 1.2.3.44:8000;
  }

  map $remote_addr $backend_svr {
    4.5.6.7 "staging2";
    default "staging1";
  }
  server {
    listen 8000;
    proxy_pass $backend_svr;
  }
}

stream {
  upstream staging1 {
    server 1.2.3.4:8000;
  }

  upstream staging2 {
    server 1.2.3.44:8000;
  }

  map $remote_addr $backend_svr {
    4.5.6.7 "staging2";
    default "staging1";
  }
  server {
    listen 8000;
    proxy_pass $backend_svr;
  }
}