Apache mod_proxy: Несколько виртуальных хостов отключают друг друга

У меня есть сервер Ubuntu 12.04, которому установили Redmine уже на автономном апаче (все под/opt/redmine). Я хотел установить экземпляр Jenkins в той же системе, не изменяя существующую установку слишком много. Я хочу, чтобы эти два сервиса были доступны в соответствии с sub.domain.com/redmine и sub.domain.com/jenkins соответственно.

Я изменил апача Redmines для слушания на порте 8081 вместо 80, установил дополнительного апача через Кв. и настроил виртуальный хост, который проксирует '/redmine' к localhost:8081/redmine. К настоящему времени все хорошо работало. Redmine был доступен как прежде. Однако, когда я настроил Jenkins тот же путь, с котом, слушающим на порте 8080, префикс URL 'jenkins' и новый виртуальный хост, Redmine прекращает работать, т.е. Я получаю 404. Когда я удаляю Jenkins виртуальный хост, Redmine работает снова.

Вот эти два файла под/etc/apache2/sites-available, которые я позволяю/запрещаю через a2ensite/a2dissite.

Redmine:

<VirtualHost *:80>
    ServerAdmin webmaster@domain.com
    ServerName sub.domain.com
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPreserveHost off
    ProxyPass /redmine http://localhost:8081/redmine
    ProxyPassReverse /redmine http://localhost:8081/redmine
</VirtualHost>

Jenkins:

<VirtualHost *:80>
    ServerAdmin webmaster@domain.com
    ServerName sub.domain.com
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPreserveHost off
    ProxyPass /jenkins http://localhost:8080/jenkins
    ProxyPassReverse /jenkins http://localhost:8080/jenkins
</VirtualHost>

Я предполагаю, что существует проблема с одной или обоими из тех файлов. Я скопировал их с учебного руководства Jenkins, которое приняло только единственный виртуальный хост. Везде, где я ищу mod_proxy решения для нескольких хостов, я нахожу примеры, которые отображают различные порты на различные домены, т.е. с другим ServerNames. Но это не то, что я хочу. Я должен использовать RewriteEngine?

6
задан 17 August 2014 в 19:41
1 ответ

Вам нужно использовать один виртуальный хост для обработки обоих!

Apache соответствует призракам, основанным на заголовке HTTP Host. Так как имя хоста одинаково вне зависимости от того, имеет ли клиент доступ к redmine или jenkins, оба должны в одном и том же vhost.

Что происходит с вашей текущей конфигурацией, так это то, что Apache определяет, какой vhost должен совпасть, как только видит заголовок хоста. Так как 'j' идет перед 'r' по алфавиту, он дает приоритет вашему vhost-файлу jenkins, несмотря на то, что оба совпадают.

Вы пытаетесь найти совпадение, основываясь на URI запроса, и прокси соответственно.

Директива уже имеет встроенную функциональность!

Для достижения вашей цели вы можете использовать нечто подобное в одном фоге:

<VirtualHost *:80>
ServerAdmin webmaster@domain.com
ServerName sub.domain.com
ProxyRequests Off

<Proxy http://sub.domain.com/jenkins>

    Order deny,allow
    Allow from all

    ProxyPreserveHost off
    ProxyPass http://localhost:8080/jenkins
    ProxyPassReverse http://localhost:8080/jenkins

</Proxy>
<Proxy http://sub.domain.com/redmine>

    Order deny,allow
    Allow from all

    ProxyPreserveHost off
    ProxyPass http://localhost:8081/redmine
    ProxyPassReverse http://localhost:8081/redmine

</Proxy>

</VirtualHost>
3
ответ дан 3 December 2019 в 00:38

Теги

Похожие вопросы