配置虚拟主机Apache

时间:2011-07-26 20:47:51

标签: java redirect jboss virtualhost contextpath

我一直在尝试配置我的apache服务器来支持虚拟主机,这些主机会将端口80上的任何请求重定向到Jboss AS中托管的不同应用程序,所以例如我的配置是这样的:

<VirtualHost *:80>
ServerName www.testdomain.com
ProxyPass / http://localhost:8080/contextPath
ProxyPassReverse / http://localhost:8080/contextPath
ProxyPreserveHost On 
ProxyPassReverseCookiePath / / 

</VirtualHost>

然而问题是,当我尝试访问http://www.testdomain.com时,url会被有效地重定向到localhost:8080,但是,我有一个重复的上下文路径。 I.E:http://www.testdomain.com/contextPath/contextPath

任何想法为什么会发生这种情况。非常感谢。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,这是通过向网址添加forwards来解决的。

ProxyPass / http://localhost:8080/contextPath/
ProxyPassReverse / http://localhost:8080/contextPath/

这为我解决了!

单个虚拟主机文件的完整示例。我有几个,每个域和子域一个。

ProxyRequests Off
ProxyPreserveHost On
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName        enter.name.here
        ProxyPass         / http://127.0.0.1:8080/<contextPath>/
        ProxyPassReverse  / http://127.0.0.1:8080/<contextPath>/
        ErrorLog /var/log/apache2/somelog.log
        CustomLog /var/log/apache2/somecustom.log common
</VirtualHost>

答案 1 :(得分:1)

您需要删除“ProxyPass”和“ProxyPassReverse”条目,除非您确实尝试代理某些内容。如果jboss AS在另一台服务器上,那么你需要保留代理条目,但是在我看来,如果内容在一台机器而不是倍数上,你可能会变得太难。

如果您希望一台服务器使用不同的基本文件夹作为2个不同域的根目录,则需要通过指定DocumentRoot参数来配置2个域。

例如,如果我想在一台计算机上托管google.com和yahoo.com,我的虚拟主机条目将包含:

<VirtualHost *:80>
ServerName www.google.com
DocumentRoot /var/www/Google
</VirtualHost>
<VirtualHost *:80>
ServerName www.yahoo.com
DocumentRoot /var/www/Yahoo
</VirtualHost>

然后,每个服务器的根目录将分别进入google文件夹和yahoo文件夹。

如果您尝试代理完全不同的计算机,则以下内容应该有效:

<VirtualHost *:80>
ServerName www.google.com
ProxyPass / www.google.com
</VirtualHost>
<VirtualHost *:80>
ServerName www.yahoo.com
ProxyPass / www.yahoo.com
</VirtualHost>

你的参赛作品没有多大意义。我认为应该是这样的:

<VirtualHost *:80>
ServerName www.testdomain.com
ProxyPass /contextPath http://localhost:8080
ProxyPassReverse /contextPath http://localhost:8080
</VirtualHost>