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

2015-08-06 22:15:18 +08:00
 ss098
对于不同的域名用到了不同的 proxy_pass,但是出站使用的都是 eth1 的 IP,如何指定不同的域名的 proxy_pass 使用不同的出站 IP。
5562 次点击
所在节点    NGINX
16 条回复
chinabrowser
2015-08-06 22:39:56 +08:00
upstream
chinabrowser
2015-08-06 22:40:41 +08:00
噫 如果是不同的目标域名就用iptables替换源IP
ss098
2015-08-06 22:48:47 +08:00
@chinabrowser 现在的情况是所有的 proxy_pass 向外请求的流量都走的 eth1 的 IP,如果用 iptables 会不会导致走 eth2(iptables 指定的出站 ip)而不是分别一个 ip。
lyf362345
2015-08-06 22:51:39 +08:00
你也可以每个 server 单独监听一个 ip
ss098
2015-08-06 22:54:58 +08:00
@lyf362345 目前确实是 listen 不同的服务器 IP 的,但是依然 proxy_pass 走的是 eth1 的 IP。
littlehz
2015-08-06 23:14:29 +08:00
指定出站IP应该是配置路由表吧。
Lullaby
2015-08-06 23:20:25 +08:00
多个server配server_name
ss098
2015-08-06 23:23:23 +08:00
@littlehz 看了一下 Nginx 路由表,跟需求不一样。

@Lullaby 已经配置了,请重新理解我的需求。
rekey
2015-08-06 23:27:37 +08:00
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
2015-08-07 00:19:43 +08:00
BOYPT
2015-08-07 00:31:49 +08:00
@fox0001 这个文章是解决多IP服务器识别受访IP,楼主问的是从本机出口的IP。

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

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

参考文献: http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.simple.html
ryd994
2015-08-07 00:37:45 +08:00
ss098
2015-08-07 00:38:35 +08:00
@BOYPT 非常感谢,简单看了一下,该方案能解决我的需求。
ss098
2015-08-07 00:41:39 +08:00
@ryd994 这个更加便捷,非常感谢。
lyf362345
2015-08-07 10:23:00 +08:00
又学到新东西了, 感谢11, 12楼.
chinabrowser
2015-08-07 16:32:03 +08:00
@ss098 iptables to source

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/211362

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX