Я не могу найти никакой документации по приоритету / порядку выполнения инструкций Apache vhosts между
mod_alias
( инструкции перенаправления
), mod_rewrite
( RewriteRule
инструкций) mod_proxy
( ProxyPass
инструкций). Есть ли какая-либо документация о порядке, в котором они будут обрабатываться Apache? Какой из них имеет приоритет над другим?
Общее правило состоит в том, что порядок директив важен. Директива, которая идет первой и соответствует , выигрывает (точно так же, как порядок определений VirtualHost
- первый VHost является VHost по умолчанию).
В большинстве случаев он должен работать нормально, если вы определяете псевдоним
es / Redirect
s и RewriteRule
сначала, а правила прокси, такие как ProxyPass
, последними, если хотите, чтобы перенаправление происходило раньше применяются ваши настройки прокси.
http://httpd.apache.org/docs/2.4/mod/mod_alias.html#order
Псевдонимы и перенаправления, возникающие в различных контекстах, обрабатываются как и другие директивы согласно стандарту слияние правила . Но когда несколько псевдонимов или перенаправлений происходят в одном контексте (для например, в том же
section) они обрабатываются в определенном порядке.
Во-первых, все перенаправления обрабатываются до обработки псевдонимов, и поэтому запрос, соответствующий
Перенаправить
илиRedirectMatch
никогда не будет иметь псевдонимов. Во-вторых, псевдонимы и перенаправления обрабатываются в том порядке, в котором они появляются в файлах конфигурации, с первое совпадение имеет приоритет.По этой причине, когда две или более из этих директив применяются к тот же вложенный путь, вы должны сначала указать наиболее конкретный путь, чтобы все директивы должны иметь эффект.
https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html # rewriterule
Директива
RewriteRule
- настоящая рабочая лошадка для перезаписи. В директива может встречаться более одного раза, причем каждый экземпляр определяет единое правило перезаписи. Порядок, в котором определены эти правила: важно - это порядок, в котором они будут применяться в время выполнения.
См. также: Apache mod_rewrite Технические подробности
https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass
Порядок директив ProxyPass
Настроенные правилаProxyPass
иProxyPassMatch
проверяются в порядке настройки. В первое подходящее правило побеждает. Поэтому обычно вам следует сортировать конфликтующиеProxyPass
правила, начиная с самых длинных URL-адресов. В противном случае позже правила для более длинных URL-адресов будут скрыты любым более ранним правилом, использующим ведущая подстрока URL-адреса. Обратите внимание, что есть некоторая связь с совместное использование работника.Упорядочивание директив ProxyPass в локациях
Только одна директиваProxyPass
может быть помещена в блокLocation
, и наиболее конкретный местоположение будет иметь приоритет.Исключения и переменная среды без прокси
Исключения должны предшествовать общим директивамProxyPass
. В версии 2.4.26 и более поздних версиях переменная окружения "без прокси" является альтернативой исключениям, и это единственный способ настроить исключениеProxyPass
директива в контекстеLocation
. Эта переменная должна быть установлена сSetEnvIf
, посколькуSetEnv
не оценивается достаточно рано.