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

Maxim Dounin mdounin at mdounin.ru
Thu Jun 26 11:47:55 UTC 2014


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

Вам показалось, процитированное регулярное выражение - не 
работает.

> Вопрос: почему не работает "вроде более правильная" регулярка
> location ~ ^/(images|css|js|files)/ { ... ? (символ начала строки
> первый)

А эта - как раз должна работать.
Видимо, результаты тестирования - обратны тому, что на самом деле.

> 2. Далее пытаюсь для подкаталога /images/foo/ сделать отдельный локейшн:
> location ~ ^/images/foo/ {
>        root /path/to/static;
>        access_log off;
>        add_header Content-Type image/jpeg;
>        expires max;
> }
> Получаю 403 ошибку, хотя, повторюсь, в первом локейшене все нормально
> отдает, т.е. права на файлы точно открыты.

В error log'е должно быть написано, почему ошибка.  Подозреваю, 
что вы попытались запросить индекс, в то время как его нет, а 
autoindex - запрещён.

http://nginx.org/r/index
http://nginx.org/r/autoindex

> Подскажите, пожалуйста, в чем косяки?

Основная проблема в том, что вы используете регулярные выражения 
там, где без них можно прекрасно обойтись.  Используйте префиксные 
location'ы - и конфигурация станет куда проще и понятнее.

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



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