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