我有端口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等…