Я не могу найти никакой документации по приоритету / порядку выполнения инструкций Apache vhosts между
mod_alias
(Redirect
инструкции),mod_rewrite
(RewriteRule
инструкции)mod_proxy
(ProxyPass
инструкции).Есть ли какая-нибудь документация о том, в каком порядке они будут обрабатываться Apache? Какой из них имеет приоритет над другим?
Общее правило заключается в том, что порядок директив важен. Директива, которая идет первой и соответствует выигрывает (точно так же, как порядок VirtualHost
определения - первый VHost является VHost по умолчанию).
В большинстве случаев все должно работать нормально, если вы определите Alias
es /Redirect
s и RewriteRule
правила первого и прокси, такие как ProxyPass
последнее, если вы хотите разрешить перенаправление до применения настроек прокси.
http://httpd.apache.org/docs/2.4/mod/mod_alias.html#order
Псевдонимы и перенаправления, встречающиеся в разных контекстах, обрабатываются, как и другие директивы, в соответствии со стандартом. правила слияния. Но когда несколько псевдонимов или перенаправлений происходят в одном контексте (например, в одном и том же
<VirtualHost>
раздел) они обрабатываются в определенном порядке.Во-первых, все перенаправления обрабатываются до обработки псевдонимов, поэтому запрос, соответствующий
Redirect
или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 block
, и наиболее конкретное местоположение будет иметь приоритет.Исключения и переменная среды без прокси
Исключения должны предшествовать общемуProxyPass
директивы. В версии 2.4.26 и более поздних версиях переменная среды «no-proxy» является альтернативой исключениям и единственным способом настроить исключениеProxyPass
директива вLocation
контекст. Эта переменная должна быть установлена сSetEnvIf
, так какSetEnv
не оценивается достаточно рано.