location ~ \.php$

Maxim Dounin mdounin at mdounin.ru
Thu Oct 18 18:02:10 MSD 2007


Hello!

On Thu, 18 Oct 2007, Gena Makhomed wrote:

> MD> Совсем правильный ответ - перепроектировать систему так,
> MD> чтобы location'ы с регулярными выражениями в конфиге отсутствовали.
>
> потому что сопоставление запроса и регулярного выражения в location ~ \.php$
> занимает слишком много ресурсов процессора, или почему такая рекомендация?

Потому что они все проверяются для каждого запроса последовательно, внося 
оверхед пропроциональный количеству описанных location'ов с regexp'ами. 
Соответственно - такой подход не масштабируется.

Ну и по тем же причинам, о которых уже сказал Игорь - они вносят 
необходимость мучительно искать "а какая же конфигурация сработала". 
Собственно, раз в неделю возникающие вопросы "а почему у меня не 
включается авторизация на index.php" - это оно и есть.

А особенно, наверное, смешно если в regexp'е ошибиться. :)

> если это действительно так, тогда может быть имеет смысл внутри nginx
> регулярные выражения вида ~ \.php$ обрабатывать не через библиотеку pcre
> а специально оптимизированной для такого случая функцией "сопоставления"?
>
> например, при парсинге конфига - распознавать regexпы \.AB$ \.ABC$ \.ABCD$
> и потом при обработке запросов соответствие uri таким шаблонам можно будет
> проверять буквально несколькими машинными инструкциями. например, для i386
> и шаблона ~ \.php$ весь match может быть сформулирован 1 машинной командой
> псевдокод: *( (uint32*)( uri_string[ uri_len - 4 ] ) ) == (uint32)('.php')

Можно, но IMHO нет смысла.

Maxim Dounin





More information about the nginx-ru mailing list