#docker #flask #apache2
Вопрос:
У меня есть сервер, на котором я размещаю несколько приложений. Все они доступны в своих собственных подкаталогах через одно и то же имя сервера, поэтому мое приложение foo
находится по адресу www.servername.com/foo
, bar
находится по адресу www.servername.com/bar
и так далее. Большинство из этих приложений-это приложения Flask с маршрутом и статическими файлами, настроенными через apache VirtualHost *:443
для запуска SSL.
Мне дали другое приложение Flask baz
для запуска на сервере, которое было настроено на разделение на два контейнера Docker , один для приложения и один для базы данных. Мне удалось настроить свой файл apache .conf следующим образом:
<VirtualHost *:443>
ServerName www.servername.com
# some additional config for my other apps, in Directories and static aliases
ProxyPreserveHost On
SSLProxyEngine On
<Proxy *>
Allow from *
</Proxy>
ProxyPass "/baz" "http://<IP address>:5000"
ProxyPassReverse "/baz" "http://<IP address>:5000"
</VirtualHost>
Я думаю, что конфигурация достигает запущенного контейнера, потому что, когда я перехожу к www.servername.com/baz
нему, он перенаправляется на www.servername.com/login
. Он должен перенаправить на www.servername.com/baz/login
, но явно что-то пошло не так. Как я могу заставить прокси правильно направлять весь baz
трафик через /baz
подкаталог?
Кроме того, я могу вручную перейти на www.servername.com/baz/login
страницу входа в baz
приложение, чтобы просмотреть ее, но, похоже, CSS не загружен, поэтому я предполагаю, что статические файлы не загружаются. Нужно ли мне также настраивать псевдоним для этих статических файлов, как я делаю с другими приложениями, не связанными с докером? Если да, то стандартный формат, который я обычно использую:
Alias baz/static /path/to/baz/static
не работает. По прихоти я также попробовал кое-что более странное, просто чтобы посмотреть, сработает ли это:
Alias "baz/static" "http://<IP address>:5000/static"
но и это не сработало. Возможно, это будет исправлено путем решения проблемы маршрутизации прокси-сервера выше, но как я могу сделать статические файлы доступными для baz
приложения?
Ответ №1:
Похоже, что веб-сайт, под которым он работает, /baz
не знает, где он работает, и поэтому вместо этого отображает URL /
-адреса. У вас есть несколько вариантов:
- Используйте поддомены:
baz.servername.com
. Тогда приложения Flask могут просто/
свободно использовать без конфликтов. - Сообщите приложениям Flask, где они работают, чтобы ваше приложение Flask было настроено для использования
/baz
в качестве префикса каждого URL-адреса, который оно обслуживает.