![将子域名定向到其他服务器](https://linux22.com/image/585031/%E5%B0%86%E5%AD%90%E5%9F%9F%E5%90%8D%E5%AE%9A%E5%90%91%E5%88%B0%E5%85%B6%E4%BB%96%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我的服务器上的不同 Tomcat 实例下运行着许多 Web 应用程序,并且有一个 Apache 实例在端口 80 上运行。
我要配置 Apache 实例,以便带有子域的传入请求将重定向到适当的服务器。
例如请求应该http://wiki.mydomain.com
重定向到http://localhost:8080
通过配置虚拟主机可以实现吗?
答案1
您可以使用 mod_rewrite 来执行此操作。模块文档底部有一些将一个 URL 重写为另一个 URL 的示例(所有示例都没有非默认端口,但这应该不是问题):https://httpd.apache.org/docs/current/mod/mod_rewrite.html
答案2
这是我提交的答案相同另一个问题,但我相信它适用于此处。您使用了“重定向”一词,但我真的认为您的意思是您希望公共 Web 用户访问您的 localhost:8080 服务器,而简单的重定向或 URL 重写无法实现这一点。这就是您将代理连接到 localhost:8080 服务器的方式,如果您愿意,还有其他额外的用途。
通过mod_proxy
Apache2,您可以将不同的路径代理到本地主机或您的服务器可访问的任何其他地方的不同目的地,包括您的本地网络内(如果您的服务器可以访问它)。
为此你可以使用ProxyPass
(ProxyPass 的 Apache2 文档,即非常有用的阅读材料)如下例所示:
<VirtualHost *:80>
ServerName some.example.host.xyz
DocumentRoot /var/www/your-document-root
Alias /clients/ /var/www/clients/
ProxyPass /clients/ !
ScriptAlias /something-using-cgi/ /var/www/cgi-stuff/
ProxyPass /something-using-cgi/ !
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPass /elsewhere/ http://elsewhere.example.host.xyz:1234/
ProxyPassReverse /elsewhere/ http://elsewhere.example.host.xyz:1234/
</VirtualHost>
您需要确保设置代理安全性,以便外部用户无法将您的反向代理用作正向代理。您可以按照ProxyRequests
官方 Apache2 文档中所述进行操作。我在服务器上执行此操作的方法是将其放入服务器范围的配置中(您应该自行验证这是否足够安全):
# disables forward proxy
ProxyRequests Off