› 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 · Aug 6, 2015 · 6640 views
    This topic created in 4109 days ago, the information mentioned may be changed or developed.
    对于不同的域名用到了不同的 proxy_pass,但是出站使用的都是 eth1 的 IP,如何指定不同的域名的 proxy_pass 使用不同的出站 IP。
    Supplement 1  ·  Aug 6, 2015
    讲述的不太清楚,现有 eth1,eth2 两个 IP,分别绑定到了 Nginx 的两个配置上,并且都用到了 Nginx proxy_pass 方法,但是连接 proxy_pass 目标的出站 IP 都是 eth1,我希望两个站点分别开来。
    16 replies  •  2015-08-07 16:32:03 +08:00
    chinabrowser
    chinabrowser
    Aug 6, 2015 via Android
    1
    upstream
    chinabrowser
    chinabrowser
    Aug 6, 2015 via Android❤️1
    2
    噫 如果是不同的目标域名就用iptables替换源IP
    ss098
    ss098
    OP
    Aug 6, 2015
    3
    @chinabrowser 现在的情况是所有的 proxy_pass 向外请求的流量都走的 eth1 的 IP,如果用 iptables 会不会导致走 eth2(iptables 指定的出站 ip)而不是分别一个 ip。
    lyf362345
    lyf362345
    Aug 6, 2015❤️1
    4
    你也可以每个 server 单独监听一个 ip
    ss098
    ss098
    OP
    Aug 6, 2015
    5
    @lyf362345 目前确实是 listen 不同的服务器 IP 的,但是依然 proxy_pass 走的是 eth1 的 IP。
    littlehz
    littlehz
    Aug 6, 2015❤️1
    6
    指定出站IP应该是配置路由表吧。
    Lullaby
    Lullaby
    Aug 6, 2015❤️1
    7
    多个server配server_name
    ss098
    ss098
    OP
    Aug 6, 2015
    8
    @littlehz 看了一下 Nginx 路由表,跟需求不一样。

    @Lullaby 已经配置了,请重新理解我的需求。
    rekey
    rekey
    Aug 6, 2015❤️1
    9
    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
    fox0001
    Aug 7, 2015 via Android❤️1
    10
    BOYPT
    BOYPT
    Aug 7, 2015❤️3
    11
    @fox0001 这个文章是解决多IP服务器识别受访IP,楼主问的是从本机出口的IP。

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

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

    参考文献: http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.simple.html
    ryd994
    ryd994
    Aug 7, 2015 via Android❤️1
    12
    ss098
    ss098
    OP
    Aug 7, 2015 via iPad
    13
    @BOYPT 非常感谢,简单看了一下,该方案能解决我的需求。
    ss098
    ss098
    OP
    Aug 7, 2015 via iPad
    14
    @ryd994 这个更加便捷,非常感谢。
    lyf362345
    lyf362345
    Aug 7, 2015
    15
    又学到新东西了, 感谢11, 12楼.
    chinabrowser
    chinabrowser
    Aug 7, 2015 via Android
    16
    @ss098 iptables to source
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1247 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 21:17 · PVG 05:17 · LAX 13:17 · JFK 16:17
    ♥ Do have faith in what you're doing.