Apache HTTPD: разрешение URL для виртуального хоста с прокси и псевдонимом каталога
Вот как выглядит моя среда:
- REST API (django), работает через WSGI (mod_wsgi) на порту
http://server:8107/api
- статические файлы для сайта API (у меня есть несколько страниц администратора), в каталоге, скажем
/opt/wsgi/staticfiles/subdomain
- Веб-приложение (expressjs), работающее поверх pm2/nodejs, на
http://server:3002/
Мне нужно сгруппировать все это под виртуальным хостом на порту 80 следующим образом:
- http://subdomain.server/api: остальные API
- http://subdomain.server/api/static: статические файлы, необходимые для сайта API
- http://subdomain.server/: веб-приложение
Вот соответствующая часть конфигурации:
<VirtualHost *:80>
ServerName subdomain.server
ServerAlias subdomain.server.local
Alias /api/static/ /opt/wsgi/staticfiles/subdomain/
<Directory /opt/wsgi/staticfiles/subdomain/ >
Order Allow,Deny
Allow from All
Options -Indexes
IndexOptions Charset=UTF-8
</Directory>
ProxyPass /api http://127.0.0.1:8107/api
ProxyPassReverse /api http://127.0.0.1:8107/api
ProxyPass / http://127.0.0.1:3002/
ProxyPassReverse / http://127.0.0.1:3002/
</VirtualHost>
Теперь, когда я пытаюсь получить доступ к статическому ресурсу (скажем, например, /api/static/js/jquery.js
) я обнаружил, что URL-адрес не разрешается сначала директивой Alias, а скорее передается в приложение WSGI (/api
), что, очевидно, приводит к ошибке 404.
Переупорядочение директив, похоже, не имеет никакого эффекта.
Что я должен изменить, чтобы HTTPD работал /api/static
раньше всего?
* EDIT *: я запускаю Apache HTTPD 2.2.15 в дистрибутиве CentOS 6.5
1 ответ
Следующий conf это то, что вы ищете:
ProxyPass /api/static !
Он говорит Apache не принимать этот путь во внимание при маршрутизации содержимого в ваше прокси-приложение, поэтому он может иметь дело с другими видами доступа (здесь ваша директива Alias).