如何将特定域的请求redirect到侦听特定端口的特定Web应用程序?

我有端口80上运行的apache2和运行在81上的其他应用程序服务器。

我想只为一个特定的,选定的(mydomain.com)的stream量redirect到端口81上运行的服务器,并访问这个网站,如http://mydomain.com/

我添加了iptables规则:

iptables -A PREROUTING -t nat -i eth0 -p tcp -d mydomain.com -j REDIRECT --to-port 81 

但不幸的是,不仅这个选定的域被redirect,而且所有其他运行在端口80和apache2上的网站都不应该被redirect到端口81。

有没有解决scheme实现只有一个选定的域redirect到另一个端口?

任何帮助将不胜感激。

您可以使用NameVirtualHost指令以及mod_proxy模块提供的其他ProxyPass和ProxyPassReverse指令从apache进行configuration。 这是一个基本的configuration。

 NameVirtualHost *:80 <VirtualHost *:80> ServerName mydomain.com DocumentRoot /var/www/mydomain ProxyPass / http://localhost:81/ ProxyPassReverse / http://localhost:81/ </VirtualHost> <VirtualHost *:80> ServerName www.mydomain2.com DocumentRoot /var/www/mydomain2 </VirtualHost> 

iptables看不到HTTP主机头。

你想要做的是要么从Apache的HTTPredirect(告诉客户端看http://mydomain.com:81/ )或反向代理从您的端口​​80 Apache到端口81应用程序(客户端的URL获得不需要改变,但所有stream量都将通过Apache传递,增加了额外的开销)。

首先,不鼓励在iptables规则中使用DNS名称。 Iptables将在开始时只查找一次该名称,并使用检索的IP而不是名称。 所以,避免在iptables规则中使用DNS名称。

其次,只有当您想要区分(redirect)到另一个端口的每个域的IP地址不同时,才可以使用iptables执行此操作。 否则,您需要使用其他方式,如:反向代理,redirect等…