如何获取在同一台服务器上运行的两个服务器的端口重定向?

如何获取在同一台服务器上运行的两个服务器的端口重定向?

我正在运行一个 Amazon 云,它托管两个 tomcat 实例(端口 8080 和 8081),每个 tomcat 为不同的客户运行一个 Web 应用程序(foo 和 bar)。

然而,我在尝试使端口重定向正常工作时遇到了问题。

我希望访问我的网站的用户www.foo.com能够自动重定向到 ,www.foo.com:8080/foo_app并且访问我的网站的用户www.bar.com能够自动重定向到www.bar.com:8180/bar_app

但是,我还希望端口号不成为 URL 的一部分。这一点至关重要,因为大多数用户所处的环境中无法导航www.foo.com:8080www.bar.com:8180只能在端口 80 上通信。

因此,任何输入内容的人www.bar.com/bar_app都应被重定向到www.bar.com:8081/bar_app,但 URL 仍然必须是www.bar.com/bar_app

我尝试通过以下方式实现此目的:

我使用以下命令将端口 80 上的任何通信映射到端口 8080

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

这对于 foo 用户来说很棒,但 bar 用户也会被重定向。是否可以使此 iptable 映射仅适用于某些“服务器”?

我还添加了条目/etc/apache2/httpd.conf

允许从我的服务器映射到实际的 Web 应用程序

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://123.123.123.123:8080/foo_app
    ProxyPassReverse / http://176.34.212.135:8080/foo_app
    ServerName www.foo.com
    ServerAlias www.foo.com
</VirtualHost>

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://123.123.123.123:8180/bar_app
    ProxyPassReverse / http://176.34.212.135:8180/bar_app
    ServerName www.bar.com
    ServerAlias www.bar.com
</VirtualHost>

我将非常感谢任何能就采取的方法提供建议的人的帮助。

谢谢

答案1

您不需要 iptables 配置。事实上,您的问题可能就出在这里。Apache 将执行代理。Apache 在端口 80 上接收针对任一域名的请求,并将请求代理到端口 8080 或 8180 上的正确 Tomcat 服务器,就像您一样。

您的情况通常都很好。请确保您已启用 mods (proxy、proxy_http)。

a2enmod proxy
a2enmod proxy_http

重新启动 Apache。

这些可能已经启用 - 它会告诉您是否已启用。

以下是我对您的 VHost 条目的建议:

<VirtualHost *:80>
    ServerName www.foo.com

    ProxyPreserveHost On

    ProxyPass /foo_app http://123.123.123.123:8080/foo_app
    ProxyPassReverse /foo_app http://176.34.212.135:8080/foo_app

    RewriteEngine on

    RewriteRule ^/$ http://www.foo.com/foor_app

</VirtualHost>

<VirtualHost *:80>
    ServerName www.bar.com

    ProxyPreserveHost On

    ProxyPass /bar_app http://123.123.123.123:8180/bar_app
    ProxyPassReverse /bar_app http://176.34.212.135:8180/bar_app

    RewriteEngine on

    RewriteRule ^/$ http://www.bar.com/bar_app
</VirtualHost>

使用 ProxyPass,我总是让两边的 URL 保持平衡 - 可能让它们不同,但我从未成功过。以上几乎就是我在某些服务器上的情况。

相关内容