Настройка виртуальных хостов Apache - PullRequest
1 голос
/ 27 июля 2011

Я пытался настроить свой сервер 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 ]

2 голосов
/ 06 июня 2012

У меня была та же проблема, и она была решена путем добавления прямых ссылок в URL.

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 голос
/ 27 июля 2011

Вам необходимо удалить записи «ProxyPass» и «ProxyPassReverse», если вы действительно не пытаетесь прокси-сервер.Если jboss AS находится на другом сервере, вам нужно сохранить записи прокси, но мне кажется, что это может усложнить задачу, если содержимое находится на одной машине и не кратно.

Если вы хотите, чтобы один сервер использовал разные базовые папки в качестве корневого для 2 разных доменов, вам необходимо настроить 2 домена, указав параметр DocumentRoot.

например, если бы я хотел разместить 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>
...