【发布时间】:2018-05-02 21:12:13
【问题描述】:
假设我有一台连接到 Internet 的网关服务器(一个公共 IP XX.XX.XX.XX - *.mydomain.com 指向它);和两个 Web 服务器 A 和 B 连接(192.168.0.1 和 192.168.0.2)并运行 apache2。
在网关上,当前所有http流量都被重定向到服务器A:
iptables -A PREROUTING -t nat -i em3 -p tcp --dport 80 -j DNAT --to 192.168.0.1:80
iptables -A PREROUTING -t nat -i em3 -p tcp --dport 443 -j DNAT --to 192.168.0.1:443
(而且效果很好)
我需要什么
我正在慢慢地将网络服务器从服务器 A 迁移到服务器 B。目前,我有多个子域 (*.mydomain.com) 指向服务器 A,我计划将每个网站逐步移动到服务器 B。
在给定时间,当客户继续使用site1.mydomain.com 时,www/ 文件夹可能仍在服务器 A 上,或者已经在服务器 B 上。
- 我想在网关上编辑 NAT 规则,以便查询两个网络服务器以回答给定的 http 请求。
我尝试了什么
我可能很年轻和天真,但我虽然可以对服务器 B 进行相同的 NAT,所以当我继续使用siteY.mydomain.com 时,两个网络服务器上的流量都在进行,而带有虚拟主机的那个正在显示网页.我尝试了这些规则:
# server A - rules already used
iptables -A PREROUTING -t nat -i em3 -p tcp --dport 80 -j DNAT --to 192.168.0.1:80
iptables -A PREROUTING -t nat -i em3 -p tcp --dport 443 -j DNAT --to 192.168.0.1:443
# server B - new rules
iptables -A PREROUTING -t nat -i em3 -p tcp --dport 80 -j DNAT --to 192.168.0.2:80
iptables -A PREROUTING -t nat -i em3 -p tcp --dport 443 -j DNAT --to 192.168.0.2:443
但我认为两者都被忽略了,因为每个请求仍然登陆服务器 A。
问题
1. 是否可以“复制”两个网络服务器上的流量? (也许是笨蛋,抱歉)
2. 我可以告诉网关类似“如果它用于 site1.mydomain.com,则留在服务器 A;但如果它用于 site2.mydomain.com,则继续使用服务器B”?
3. 实现这一目标的最佳解决方案是什么?
我无法使网关运行 apache。理想情况下: 我不想使用不同的端口; 我不想编辑服务器 A 或 B iptables。
如有需要,请随时纠正我或询问更多细节!
来源/线索:
【问题讨论】:
-
嗨,IPtables 总是只评估规则直到第一次匹配。如果要根据域重定向流量,则需要反向代理。 NGIX 将是一个很好的轻量级解决方案!
标签: unix routing routes iptables