Re: простая статика и регулярки

Maxim Dounin mdounin at mdounin.ru
Fri Jun 27 14:03:56 UTC 2014


Hello!

On Fri, Jun 27, 2014 at 08:58:19AM +0600, Mihail Nasedkin wrote:

> Спасибо, Максим.
> 
> 26.06.14, Maxim Dounin<mdounin at mdounin.ru> написал(а):
> > Hello!
> >
> > On Thu, Jun 26, 2014 at 03:42:35PM +0600, Mihail Nasedkin wrote:
> >
> >> Доброго всем,
> >>
> >> 1. Странная регулярка для статики:
> >>
> >> location ~ /^(images|css|js|files)/ {
> >>         root /path/to/static; # A request for "/images/foo.ext" will
> >> return the file /path/to/static/images/foo.ext
> >>         access_log off;
> >>         expires 30d;
> >> }
> >> Эта регулярка работает, в т.ч. для запросов типа /images/foo/bar.jpg
> >
> > Вам показалось, процитированное регулярное выражение - не
> > работает.
> 
> Реально работает, я голову сломал.

Не работает.  Вы наблюдаете эффект от сложного конфига, в котором 
запрос попадает не туда, куда вам кажется, и от этого кажется, что 
работает.

Вынесите соответствующее регулярное выражение в отдельный блок 
server, в конфиг вида:

    server {
        server_name foo;

        location / {
            return 200 "this is location /\n";
        }

        location ~ /^(images|css|js|files)/ {
            return 200 "this is location /^(images|css|js|files)/\n";
        }
    }

И убедитесь, что оно не работает:

$ fetch -qo - http://localhost:8080/images/foo.jpg
this is location /

Что конкретно происходит в вашем конфиге, и почему вам кажется, 
что оно работает - "по хвосту" сказать нельзя.  Нужно смотреть на 
весь блок server{} как минимум.

[...]

> Хорошо, сделал как надо:
> 
>     location /static/ {
>         root /path/to/static;
>         access_log off;
>         expires max;
>     }
> 
> Но почему возникают проблемы с доступом к файлу open()
> "/path/to/static/foo/bar.ext" failed (13: Permission denied)?
> Ведь в локации с регулярным выражением этот файл отдает! Права доступа
> проверил сотню раз. Я так понимаю, построение автоиндекса каталога не
> задействовано, запрошен конкретный файл.

Насколько я понимаю, с этим вы уже разобрались, и дело было в 
правах.

-- 
Maxim Dounin
http://nginx.org/



Подробная информация о списке рассылки nginx-ru