iptables:如何redirect端口80只为特定的域

抱歉的标题,但即时通讯服务器configuration这样的新手。 我有一个问题(当然),我会尽我所能解释给你:

  • 我有一个基于apache2的vps,debian,在这里我有两个configuration了虚拟主机的域。
  • 第一个域被用作Web服务器(RUBY)的别名,并且与端口8080一起工作
  • 第二个是网站,所以它应该用80端口,用apache2 + mysql

我的问题是,networking服务器需要redirect连接从端口80到8080,所以我的ruby开发人员(不是我,我吸入ruby)做了一个redirect

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 

作为一个前因,我的网站当然不在80港口工作。 我的问题:是否有办法告诉iptablesredirect端口80只有连接有关的ruby服务器(所以,第一个域?)我不能改变服务器的端口,所以你如何build议我为了使用80的网站? 对于愚蠢的问题抱歉,但我完全吮吸在这。 我忘了提及,我不再与ruby开发者联系,所以这使得事情对我来说更为戏剧化:)

提前致谢

如果你同时服务于同一个IP的两个域,你不能通过端口转发来做到这一点,因为iptables无法知道客户端试图连接到哪个域。 您的服务器不参与DNS查找,并且在TCP连接build立之前,客户端不会发送HTTP Host:标头。

但是,您可以执行的操作是使用Apache的mod_proxy设置一个将HTTP请求中继到Ruby服务器的反向代理 。 这个配方显示了:

 <VirtualHost *:*> ProxyPreserveHost On ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ ServerName your.ruby.site </VirtualHost> 

通过这种configuration,访问Ruby站点的人将不会连接到Ruby服务器,他们将连接到Apache。 但是Apache将通过从Ruby服务器请求它们来提供页面,所以结果基本相同。