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

Другие вопросы по тегам