V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
ss098
V2EX  ›  NGINX

Nginx 对于具有多个 IP 的服务器如何指定 proxy_pass 的 IP

  •  
  •   ss098 ·
    ss098 · 2015-08-06 22:15:18 +08:00 · 5644 次点击
    这是一个创建于 3388 天前的主题,其中的信息可能已经有所发展或是发生改变。
    对于不同的域名用到了不同的 proxy_pass,但是出站使用的都是 eth1 的 IP,如何指定不同的域名的 proxy_pass 使用不同的出站 IP。
    第 1 条附言  ·  2015-08-06 23:22:20 +08:00
    讲述的不太清楚,现有 eth1,eth2 两个 IP,分别绑定到了 Nginx 的两个配置上,并且都用到了 Nginx proxy_pass 方法,但是连接 proxy_pass 目标的出站 IP 都是 eth1,我希望两个站点分别开来。
    16 条回复    2015-08-07 16:32:03 +08:00
    chinabrowser
        1
    chinabrowser  
       2015-08-06 22:39:56 +08:00 via Android
    upstream
    chinabrowser
        2
    chinabrowser  
       2015-08-06 22:40:41 +08:00 via Android   ❤️ 1
    噫 如果是不同的目标域名就用iptables替换源IP
    ss098
        3
    ss098  
    OP
       2015-08-06 22:48:47 +08:00
    @chinabrowser 现在的情况是所有的 proxy_pass 向外请求的流量都走的 eth1 的 IP,如果用 iptables 会不会导致走 eth2(iptables 指定的出站 ip)而不是分别一个 ip。
    lyf362345
        4
    lyf362345  
       2015-08-06 22:51:39 +08:00   ❤️ 1
    你也可以每个 server 单独监听一个 ip
    ss098
        5
    ss098  
    OP
       2015-08-06 22:54:58 +08:00
    @lyf362345 目前确实是 listen 不同的服务器 IP 的,但是依然 proxy_pass 走的是 eth1 的 IP。
    littlehz
        6
    littlehz  
       2015-08-06 23:14:29 +08:00   ❤️ 1
    指定出站IP应该是配置路由表吧。
    Lullaby
        7
    Lullaby  
       2015-08-06 23:20:25 +08:00   ❤️ 1
    多个server配server_name
    ss098
        8
    ss098  
    OP
       2015-08-06 23:23:23 +08:00
    @littlehz 看了一下 Nginx 路由表,跟需求不一样。

    @Lullaby 已经配置了,请重新理解我的需求。
    rekey
        9
    rekey  
       2015-08-06 23:27:37 +08:00   ❤️ 1
    upstream go {
    server 127.0.0.1:8080;
    server 192.168.1.1:8080;
    }

    server {
    server_name go.com;
    listen 80;
    location / {
    proxy_pass http://go;
    proxy_set_header Host $host;
    proxy_set_header User-Agent $http_user_agent;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }


    类似以上?
    fox0001
        10
    fox0001  
       2015-08-07 00:19:43 +08:00 via Android   ❤️ 1
    BOYPT
        11
    BOYPT  
       2015-08-07 00:31:49 +08:00   ❤️ 3
    @fox0001 这个文章是解决多IP服务器识别受访IP,楼主问的是从本机出口的IP。

    其实这个问题和nginx无关,任意程序对外访问都走默认路由那一个IP。

    所以楼主需要添加第二个路由表第二个路由表的默认路由走eth0,然后使用ip rule 添加策略路由,让访问特定IP 的规则走第二个路由表。

    参考文献: http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.simple.html
    ryd994
        12
    ryd994  
       2015-08-07 00:37:45 +08:00 via Android   ❤️ 1
    ss098
        13
    ss098  
    OP
       2015-08-07 00:38:35 +08:00 via iPad
    @BOYPT 非常感谢,简单看了一下,该方案能解决我的需求。
    ss098
        14
    ss098  
    OP
       2015-08-07 00:41:39 +08:00 via iPad
    @ryd994 这个更加便捷,非常感谢。
    lyf362345
        15
    lyf362345  
       2015-08-07 10:23:00 +08:00
    又学到新东西了, 感谢11, 12楼.
    chinabrowser
        16
    chinabrowser  
       2015-08-07 16:32:03 +08:00 via Android
    @ss098 iptables to source
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1161 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:00 · PVG 07:00 · LAX 15:00 · JFK 18:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.