location ~ \.php$

Maxim Dounin mdounin at mdounin.ru
Fri Oct 19 01:45:02 MSD 2007


Hello!

On Thu, 18 Oct 2007, Gena Makhomed wrote:

>>> MD> Совсем правильный ответ - перепроектировать систему так,
>>> MD> чтобы location'ы с регулярными выражениями в конфиге отсутствовали.
>
>>> потому что сопоставление запроса и регулярного выражения в location ~ \.php$
>>> занимает слишком много ресурсов процессора, или почему такая рекомендация?
>
> MD> Потому что они все проверяются для каждого запроса последовательно, внося
> MD> оверхед пропроциональный количеству описанных location'ов с regexp'ами.
> MD> Соответственно - такой подход не масштабируется.
>
> Ok. а если location`ы сделать вложенными, [ http://www.lexa.ru/nginx-ru/msg13856.html ]
>
> IS> http {
> IS>     server {
> IS>         location / {
> IS>             location /a/ {
> IS>                 location ~ \.php$ {
>                    ...
>                location /b/ {
>                    location ~ \.phtml$ {
>                    ...
>
> то при запросе файла /b/2.phtml будет проверяться только один regexp. (?)

Принципиально это, вообще говоря, ситуацию не меняет. Но позволяет 
избавиться от лишнего оверхеда там, где он гарантированно не нужен, да.

> от location'ов с регулярными выражениями можно избавиться только
> двумя способами - вынесением статики в отдельные server/location
> и с помощью location @fallback (но здесь будут "лишние" syscalls) (?)

Как вариант - явным прописыванием location'ов, которые нужно проксировать.

Я лично предпочитаю разносить статику и динамику по разным location'ам, 
при этом всю динамику прописывать явно.

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

Понятно, что для произвольного содержимого, в котором нет ни времени ни 
желания разбираться (а тем паче для случая хостинга) - "совсем правильно" 
не сделаешь. Что не мешает стремиться к прекрасному.

Maxim Dounin





More information about the nginx-ru mailing list