• 请不要在回答技术问题时复制粘贴 AI 生成的内容
MilkShake
V2EX  ›  程序员

关于 nginx 根据 IP 来访问不同后端问题

  •  
  •   MilkShake · Jul 23, 2019 · 3761 views
    This topic created in 2492 days ago, the information mentioned may be changed or developed.
    • 这个是我从网上找的的一个配置
    server {
        listen       80;
        server_name  abc.com.cn;
        access_log /dev/null;
        error_log  /data/logs/error.log;
        
        location / {
    
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
               if ($remote_addr ~ "192.168.1.100") 
                  {
                          proxy_pass http://abc_test_server;
                           break;
                   }
        proxy_pass http://abc_server;
        }
    }
    
    • 有一个问题,remote_addr 能不能通过 ip 网段来判断,如果有上百个 IP,不能 $remote_addr ~ "192.168.1.100|101|102|103|104"这样去写吧。
    • 可能对 nginx 不是很了解,可以使用通配符或者别的方式来实现不,例如"192.168.1.*"
    15 replies    2019-07-24 11:02:10 +08:00
    justseemore
        1
    justseemore  
       Jul 23, 2019
    nginx ip 分流 google 下
    taolu
        2
    taolu  
       Jul 23, 2019
    `geo`指令吧
    arrow8899
        3
    arrow8899  
       Jul 23, 2019   ❤️ 1
    if ($remote_addr ~ "192.168.1.*") 直接就是支持正则的
    MilkShake
        4
    MilkShake  
    OP
       Jul 23, 2019
    @zpfhbyx 我这个需求是两个不同的网段,一个 192.168.4.x,另一个是 172.17.10.x
    MilkShake
        5
    MilkShake  
    OP
       Jul 23, 2019
    @taolu 我搜一下。
    MilkShake
        6
    MilkShake  
    OP
       Jul 23, 2019
    @arrow8899 非常感谢
    justseemore
        7
    justseemore  
       Jul 23, 2019
    @aaa5838769 那用 2l @taolu 说的 geo 吧
    whsir
        8
    whsir  
       Jul 23, 2019
    我觉得你可以参考下这个 https://blog.whsir.com/post-4430.html
    realpg
        9
    realpg  
    PRO
       Jul 23, 2019
    正则表达式不是爱怎么写就怎么写
    ToughGuy
        10
    ToughGuy  
       Jul 23, 2019
    map $remote_addr $upstream {
    192.168.1.100 "abc_test_server";
    }

    proxy_pass http://$upstream;
    Aresxue
        12
    Aresxue  
       Jul 23, 2019
    不是默认支持正则?
    jamesliu96
        13
    jamesliu96  
       Jul 23, 2019 via Android
    用核心 map 模块或者 rewrite 模块都能实现,主要看你具体需求了,但其实很少有需要在 ng 代理上做这个的
    MilkShake
        14
    MilkShake  
    OP
       Jul 24, 2019
    @jamesliu96 那么一般都是在路由层还是 DNS 那去做?
    jamesliu96
        15
    jamesliu96  
       Jul 24, 2019 via Android
    @aaa5838769 都可以,最优方案看具体需求
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3170 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 12:05 · PVG 20:05 · LAX 05:05 · JFK 08:05
    ♥ Do have faith in what you're doing.