Я пытаюсь настроить простое приложение на Python, используя Apache2 в качестве обратного прокси. Приложение Python предназначено для предоставления списка каталогов на одной из его конечных точек. Однако я хочу, чтобы Apache обработал этот список каталогов.
Более подробно, это мое желаемое поведение:
- Все запросы к http://example.com/pypi перенаправляются в приложение Python, работающее через порт 8080. Так, например, у этого приложения есть страницы в местах "/ simple" и "/ packages", которые должны быть доступны по адресу http://example.com/pypi/simple и http://example.com/pypi/packages, соответственно.
- Приложение Python отображает некоторый HTML в предположении, что приложение имеет корень в «/». Поскольку он на самом деле находится в "/ pypi", я должен переписать некоторые ссылки HTML. Например, когда он пишет
<a href="http://example.com/simple">
, его необходимо переписать в <a href="http://example.com/pypi/simple">
.
- Расположение "/ packages" приложения Python содержит список каталогов. Но для повышения производительности я хочу переопределить запросов на http://example.com/pypi/packages, чтобы Apache вместо этого обрабатывал список каталогов и обслуживал содержимое файлов.
Мне удалось получить 1 и 2 работы, но 3 не работает. Запросы к http://example.com/pypi/packages все еще направляются в приложение Python. Вот моя конфигурация сайта Apache:
<VirtualHost *:80>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName example.com
Alias /pypi/packages /home/somebody/pypi-server/pypi-packages
<Directory /home/somebody/pypi-server/pypi-packages>
Options +Indexes
Require all granted
</Directory>
ProxyPass /pypi/ http://localhost:8080/
Redirect /pypi /pypi/
ProxyPassReverse /pypi/simple/ http://example.com/simple/
ProxyPreserveHost On
<Location "/pypi/">
SetOutputFilter proxy-html
ProxyHTMLURLMap "^/(simple|packages)/" "/pypi/$1/" [R]
</Location>
</VirtualHost>
Да, у меня включен модуль автоиндексирования. Список каталогов работает отлично, если я изменю первый аргумент директивы Alias на что-то вроде "/ xyz". Затем http://example.com/xyz делает именно то, что я хочу http://example.com/pypi/packages. Пожалуйста, помогите, заранее спасибо!