我在端口 80 上运行 apache2,其他应用程序服务器在 81 上运行。
我想将一个特定的选定域 (mydomain.com) 的流量重定向到在端口 81 上运行的服务器,并访问此网站,如下所示http://mydomain.com/
我添加了 iptables 规则:
iptables -A PREROUTING -t nat -i eth0 -p tcp -d mydomain.com -j REDIRECT --to-port 81
但不幸的是,不仅这个选定的域名被重定向,而且所有在端口 80 和 apache2 上运行的其他网站也不应该重定向到端口 81。
有没有什么解决方案可以实现只将一个选定的域重定向到另一个端口?
任何帮助都将非常感激。
答案1
您可以使用 apache 进行配置名称虚拟主机指令和附加 代理通行证和反向代理密码模块提供的指令mod_proxy
。以下是基本配置。
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>
答案2
iptables 无法看到 HTTP 主机头。
您要做的是从一个 Apache 进行 HTTP 重定向(告诉客户端查看http://mydomain.com:81/
)或从端口 80 Apache 进行反向代理到端口 81 应用程序(客户端的 URL 不需要改变,但所有流量都将通过 Apache,从而增加额外的开销)。
答案3
首先,不建议在 iptables 规则中使用 DNS 名称。Iptables 只会在开始时查找一次名称,并且将使用检索到的 IP 代替名称。因此,请避免在 iptables 规则中使用 DNS 名称。
其次,只有当您要区分(重定向)到另一个端口的每个域都有不同的 IP 地址时,您才能使用 iptables 执行此操作。否则,您需要使用其他方式,例如:反向代理、重定向等...