Я пытаюсь настроить два поддомена, для а
и б
в домен.com
. Я использую два файла .conf, которые выглядят почти одинаково с соответствующими изменениями в ServerName и ProxyPass:
<VirtualHost *:80>
ServerName a.domain.com #This was added as a try for a fix.
Redirect permanent / https://a.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName a.domain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/a
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL stuff
#Proxies
ProxyPass / https://a.domain.com:8444/
ProxyPassReverse / https://a.domain.com:8444/
ProxyPass /a/ https://a.domain.com:8444/
ProxyPassReverse /a/ https://a.domain.com:8444/
ProxyPass /b/ https://b.domain.com:8445/
ProxyPassReverse /b/ https://b.domain.com:8445/
</VirtualHost>
Это делается в моей тестовой среде, воспроизводя что-то похожее на то, что сейчас находится в производстве. В /etc/hosts я добавил a.domain.com
и b.домен.com
на 127.0.0.1. DNS в производстве имеет записи для чего a.domain.com
и b.домен.com
are, который является одним и тем же IP (я также сделал это на машине, с которой я это тестирую).
Также обратите внимание, что я не обслуживаю какой-либо контент из их корневых каталогов. Я добавил, что пытаюсь исправить проблему, указанную в заголовке. Однако в обоих каталогах есть простой html.
В чем проблема?
Просто при попытке a.domain.com
, результатом является веб-приложение из локальный: 8444
, как и ожидалось. При попытке b.домен.com
, тоже результат локальный: 8444
, вместо локальный: 8445
. Обе а.конф
и б.конф
включены, и если я отключу а.конф
, то я правильно получаю локальный: 8445
. Если я тоже попробую a.домен.com/b
, перенаправление разрешается обратно на a.domain.com
.
Я прочитал несколько вопросов и руководств, и в большинстве из них либо что-то работает, как в моей конфигурации, либо добавляется NameVirtualHost, который, как я понимаю, не нужен для моей версии Apache.Я также добавил имя сервера в порт 80, так как подумал, что, возможно, запрос на б
соответствовал а.конф
так как у них один и тот же IP, но это тоже не сработало.
Что мне здесь не хватает? Это что-то с mod_proxy, которое я, кажется, игнорирую? Если возможно, я бы хотел сохранить один файл для каждого веб-приложения. Спасибо!
Это на Ubuntu 18.04.2, Apache 2.4 (mod_proxy и mod_ssl), Tomcat 9. Любую другую информацию, которую вы хотите, я постараюсь предоставить.
ОБНОВИТЬ
Пробовал и с этой конфигурацией. Тот же нежелательный результат.
<VirtualHost *:80>
ServerAlias a.domain.com
Redirect permanent / https://a.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName a.domain.com
ServerAdmin webmaster@localhost
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL stuff
#Proxies
Redirect /b https://b.domain.com
<Location />
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
<Location /a>
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
</VirtualHost>
ОБНОВИТЬ
Хорошо, я только что нашел что-то очень раздражающее. Если я войду с помощью своего браузера в любой a.domain.com
или же b.домен.com
, они оба решают a.domain.com
. Это проблема, которую я описал изначально. НО если попробовать https://a.domain.com
или же https://b.домен.com
, оба разрешаются на правильный сервер: а
к 8444
и б
к 8445
.
Поскольку это очень расстраивает, я возьму тормоз и проанализирую это через некоторое время.
ОБНОВИТЬ
После долгого перерыва я попробовал некоторые другие случайные настройки, просто чтобы посмотреть, что получилось, и снова ничего не сработало, как ожидалось, за исключением использования HTTPS. Я установил Postman, чтобы посмотреть, что отправляется в запросе, и обнаружил, что в Postman и HTTP, и HTTPS правильно используют Host. Еще лучше/хуже: фактический ответ показывает разные приветственные страницы для a.domain.com
и b.домен.com
, что означает, что мои конфигурации работают правильно, когда я использую Postman.
Я думаю, что все эти испытания могут быть просто проблемой кеша, но мой тестовый браузер по выбору (Firefox dev ed) настроен на то, чтобы не кэшировать вещи. Я проверю ответы с помощью curl и других моих браузеров.