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