Назад | Перейти на главную страницу

Apache 2.4: порядок выполнения mod_alias, mod_rewrite, mod_proxy

Я не могу найти никакой документации по приоритету / порядку выполнения инструкций Apache vhosts между

Есть ли какая-нибудь документация о том, в каком порядке они будут обрабатываться Apache? Какой из них имеет приоритет над другим?

Общее правило заключается в том, что порядок директив важен. Директива, которая идет первой и соответствует выигрывает (точно так же, как порядок VirtualHost определения - первый VHost является VHost по умолчанию).

В большинстве случаев все должно работать нормально, если вы определите Aliases /Redirects и 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 не оценивается достаточно рано.