Re: Два location со статикой

Maxim Dounin mdounin на mdounin.ru
Вт Фев 6 14:13:09 UTC 2018


Hello!

On Tue, Feb 06, 2018 at 04:54:10PM +0300, Валентин Бартенев wrote:

> On Tuesday 06 February 2018 07:55:38 darksmoke wrote:
> > Добрый день
> > Помогите пожалуйста настроить nginx. На одном домене, два урла. Надо что бы
> > по двум урлам отдавалась разная статика.
> > 
> >     location /v3/ {                                                         
> >                                         
> >         location ~* \.(xsl|ico|gif|png|svg|js|css|html|ttf|woff|json|xml)$ {
> >                                         
> >             index index.html;                                               
> >                                         
> >             root /opt/DATA/stat/otp24v3;                                    
> >                               
> >             expires -1;                                                     
> >                                         
> >         }                                                                   
> >                                         
> >     }                                                                       
> >                                         
> >                                                                             
> >                                         
> >     location / {                                                            
> >                                         
> >         location ~* \.(xsl|ico|gif|png|svg|js|css|html|ttf|woff|json|xml)$ {
> >                                         
> >             index index.html;                                               
> >                                         
> >             access_log off;                                                 
> >                                         
> >             root /opt/DATA/stat/otp24;                                      
> >                               
> >             expires -1;                                                     
> >                                         
> >         }                                                                   
> >                                         
> >     }  
> > 
> > дергаю домен/v3/ получаю 404
> > 
> > В логе
> > 018/02/06 14:34:02 [error] 1338189#0: *217105 open() "/opt/nginx/html/v3"
> > failed (2: No such file or directory), cli
> > ent: 10.42.1.53, server: domain.ru, request: "GET /v3 HTTP/1.1", host:
> > "domain.ru"
> > 
> > Файлы статики по путям ессть, корень отрабатывает четко, а вот v3 выдает 404
> > и не могу побороть  ((
> > 
> 
> Очевидно, что запрос "/v3" не попадает в location /v3/, а тем более в location
> с регулярным выражением внутри него.
> 
> Если вы хотите чтобы попадал запрос без слеша, то нужно убрать слеш и из location.
> А чтобы всё это работало, ещё и root в нём указать правильно.

Стоит при этом иметь в виду, что под "location /v3" (без слэша) 
подпадают не только запросы к "/v3", "/v3/", и "/v3/some/file" но 
и "/v3-and-some-other-chars".  Так как location'ы работают по 
строковому префиксу.

Так что я бы рекомендовал в подобных ситуациях писать location со 
слэшом на конце, а location без слэша, если он нужен, прописывать 
явно, например:

    location = /v3 {
        return 302 /v3/;
    }

    location /v3/ {
        ...
    }

В большинстве случаев - такой отдельный "location = /v3" 
оказывается не нужен, так как:

- перенаправление с /v3 на /v3/ автоматчески возвращается, если на 
  диске есть соответствующий каталог;

- такое же перенаправление автоматически возвращается, если в 
  "location /v3/" написан proxy_pass / fastcgi_pass и т.п.

Подробнее тут:

http://nginx.org/r/location/ru

-- 
Maxim Dounin
http://mdounin.ru/


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