У меня есть экземпляр веб-сервера apache, и мне нужно сопоставить URL-адрес следующим образом:
URL от b2b.domain.eu должны быть проксированы на другой сервер 10.1.0.100 [ОНО РАБОТАЕТ]
URL от b2b.domain.eu/api должны быть проксированы в приложение api tomcat [ОНО РАБОТАЕТ]
URL от b2b.domain.eu/decoder должны быть проксированы в приложение декодера Tomcat [ОНО РАБОТАЕТ]
Для Url /App1/Shop/home.aspx нам нужно выполнить выходной фильтр [ОНО РАБОТАЕТ]
www.domain.eu и web.domain.eu должен обслуживать сайт wordpress [НЕ РАБОТАЕТ] -> Вместо этого приложение переходит в App1, которое, похоже, используется по умолчанию
Ниже представлена моя актуальная конфигурация. Я пытался изменить его по-разному, изменить порядок и т. Д., Но безуспешно. Кто-нибудь может помочь мне понять, как достичь ожидаемого поведения?
заранее спасибо
<VirtualHost *:80>
ServerName 10.1.0.101
ServerAlias b2b.domain.eu
ProxyRequests Off
ProxyPreserveHost On
ExtFilterDefine filter1 mode=output \
cmd="/var/www/cgi-bin/filter.pl /tmp/filter.out"
#Root: forward to App1 [OK]
<LocationMatch "^/">
ProxyPassMatch http://10.1.0.100/App1
ProxyPassReverse http://10.1.0.100/App1
</LocationMatch>
#API: Forward to tomcat (api) [OK]
<LocationMatch "^/api/(.*)">
ProxyPassMatch http://localhost:8080/api/$1
ProxyPassReverse http://localhost:8080/api/$1
</LocationMatch>
#Decoder: Forward to tomcat (decoder) [OK]
<LocationMatch "^/decoder(.*)">
ProxyPassMatch http://localhost:8080/decoder$1
ProxyPassReverse http://localhost:8080/decoder$1
</LocationMatch>
#App1 with filter execution [OK]
<LocationMatch "^/App1/Shop/home.aspx(.*)">
ProxyPassMatch
http://10.1.0.100/App1/Shop/home.aspx$1
ProxyPassReverse
http://10.1.0.100/App1/Shop/home.aspx$1
SetOutputFilter filter1
</LocationMatch>
#App1 [OK]
<LocationMatch "^/App1(.*)">
ProxyPassMatch http://10.1.0.100/App1$1
ProxyPassReverse http://10.1.0.100/App1$1
</LocationMatch>
</VirtualHost>
#[KO]
<VirtualHost *:80>
ServerName 10.1.0.101
ServerAlias www.domain.eu web.domain.eu
DocumentRoot /var/www/html/wordpress
</VirtualHost>
[ОБНОВЛЕНИЕ 2018/11/28]
Я изменил конфигурацию, как было предложено @tom, но эти изменения не устранили проблему. Возможно, проблема не в конфигурации Apache, а в нашем Fortinet 60E, потому что мы заметили, что добавление следующей строки в клиентах Windows в файле C: \ Windows \ System32 \ drivers \ etc \ hosts приводит к ожидаемому поведению.
10.1.0.101 web.domain.eu
Наш DNS настроен для сопоставления нашего общедоступного IP-адреса. Fortinet перенаправляет запрос (без NAT) на веб-сервер Apache (10.1.0.101), но, похоже, удаляет некоторую информацию.
Вы оба VirtualHost
экземпляры имеют одинаковую комбинацию IP + порт + ServerName. Эти три элемента вместе должны однозначно определять ваш виртуальный хост. Для виртуального хостинга на основе имени IP-адрес и номер порта будут одинаковыми, поэтому вы можете различать их, используя ServerName
директива. Не указывайте IP-адрес в качестве ServerName
.
<VirtualHost 10.1.0.101:80>
ServerName b2b.domain.eu
[...]
</VirtualHost>
<VirtualHost 10.1.0.101:80>
ServerName www.domain.eu
ServerAlias web.domain.eu
[...]
</VirtualHost>
Также прочтите документацию по виртуальный хостинг на основе имени.