У меня есть сервер Ubuntu 12.04, на котором Redmine уже установлен на автономном apache (все в / opt / redmine). Я хотел установить экземпляр Jenkins в той же системе, не изменяя слишком сильно существующую настройку. Я хочу, чтобы эти две службы были доступны под sub.domain.com/redmine и sub.domain.com/jenkins соответственно.
Я изменил Apache Redmines на прослушивание порта 8081 вместо 80, установил дополнительный apache через apt и настроил виртуальный хост, который проксирует '/ redmine' на localhost: 8081 / redmine. Пока все работало нормально. Redmine был доступен, как и раньше. Однако, когда я настроил Jenkins таким же образом, когда tomcat прослушивает порт 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>
Дженкинс:
<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 для нескольких хостов, я нахожу примеры, которые сопоставляют разные порты с разными доменами, то есть с разными именами серверов. Но я не этого хочу. Обязательно ли мне использовать RewriteEngine?
Apache сопоставляет vhosts на основе заголовка HTTP Host. Поскольку имя хоста одинаково независимо от того, обращается ли клиент к redmine или jenkins, оба должен в том же хосте.
Что происходит с вашей текущей конфигурацией, так это то, что Apache определяет, какой виртуальный хост должен соответствовать, как только он видит заголовок Host. Поскольку 'j' стоит перед 'r' в алфавитном порядке, он дает приоритет вашему файлу jenkins vhost, даже если оба совпадают.
В <Proxy>
эта функция уже встроена в директиву!
Вы можете использовать что-то вроде следующего в одном виртуальном хосте для достижения своей цели:
<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>