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
оценивается недостаточно рано.