V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aaa5838769
V2EX  ›  程序员

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

  •  
  •   aaa5838769 · 2019-07-23 11:10:42 +08:00 · 3208 次点击
    这是一个创建于 1953 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 这个是我从网上找的的一个配置
    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 条回复    2019-07-24 11:02:10 +08:00
    zpfhbyx
        1
    zpfhbyx  
       2019-07-23 11:16:16 +08:00
    nginx ip 分流 google 下
    taolu
        2
    taolu  
       2019-07-23 11:19:30 +08:00
    `geo`指令吧
    arrow8899
        3
    arrow8899  
       2019-07-23 11:25:33 +08:00   ❤️ 1
    if ($remote_addr ~ "192.168.1.*") 直接就是支持正则的
    aaa5838769
        4
    aaa5838769  
    OP
       2019-07-23 11:30:26 +08:00
    @zpfhbyx 我这个需求是两个不同的网段,一个 192.168.4.x,另一个是 172.17.10.x
    aaa5838769
        5
    aaa5838769  
    OP
       2019-07-23 11:30:43 +08:00
    @taolu 我搜一下。
    aaa5838769
        6
    aaa5838769  
    OP
       2019-07-23 11:31:13 +08:00
    @arrow8899 非常感谢
    zpfhbyx
        7
    zpfhbyx  
       2019-07-23 11:31:14 +08:00
    @aaa5838769 那用 2l @taolu 说的 geo 吧
    whsir
        8
    whsir  
       2019-07-23 13:40:44 +08:00
    我觉得你可以参考下这个 https://blog.whsir.com/post-4430.html
    realpg
        9
    realpg  
       2019-07-23 14:39:30 +08:00
    正则表达式不是爱怎么写就怎么写
    ToughGuy
        10
    ToughGuy  
       2019-07-23 16:59:25 +08:00
    map $remote_addr $upstream {
    192.168.1.100 "abc_test_server";
    }

    proxy_pass http://$upstream;
    ToughGuy
        11
    ToughGuy  
       2019-07-23 17:00:39 +08:00
    Aresxue
        12
    Aresxue  
       2019-07-23 17:18:07 +08:00
    不是默认支持正则?
    jamesliu96
        13
    jamesliu96  
       2019-07-23 17:42:32 +08:00 via Android
    用核心 map 模块或者 rewrite 模块都能实现,主要看你具体需求了,但其实很少有需要在 ng 代理上做这个的
    aaa5838769
        14
    aaa5838769  
    OP
       2019-07-24 09:49:19 +08:00
    @jamesliu96 那么一般都是在路由层还是 DNS 那去做?
    jamesliu96
        15
    jamesliu96  
       2019-07-24 11:02:10 +08:00 via Android
    @aaa5838769 都可以,最优方案看具体需求
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5357 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:15 · PVG 16:15 · LAX 00:15 · JFK 03:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.