@q-sn

Как правильно прописать location`ы в Nginx?

Есть 2 сущности: лендинг и SPA. Необходимо чтобы переходя по адресу http://127.0.0.1 отдавались файлы лендинга, а по любому другому (http://127.0.0.1/sing-in и т.п.) файлы SPA.
Застрял на следующем:
server {
    listen 80;

    server_name localhost;
    index index.html;

    location = / {
        root C:\Workspace\landing;
    }

    location ~ ".+" {
        alias C:\Workspace\frontend\dist\app-frontend;
        try_files $uri $uri/ /index.html;
    }
}

Проблема в том, что при переходе на корень (http://127.0.0.1) отдаются файлы SPA, т.е. первый location не срабатывает.
  • Вопрос задан
  • 4276 просмотров
Решения вопроса 1
@dodo512
nginx.org/ru/docs/http/ngx_http_index_module.html#index
Необходимо иметь в виду, что при использовании индексного файла делается внутреннее перенаправление и запрос может быть обработан уже в другом location’е. Например, в такой конфигурации:
location = / {
    index index.html;
}

location / {
    ...
}

запрос “/” будет фактически обработан во втором location’е как “/index.html”.

Поэтому в location = / вместо index нужен try_files.
У лендинга там же кроме /index.html есть ещё скрипты, картинки, стили
C:\Workspace\landing:
-css/
-images/
-js/
-index.html

server {
    listen 80;

    server_name localhost;
    index index.html;

    root C:/Workspace/landing;
    
    location = / {
        try_files /index.html =404;
    }
    
    location /images/ { }
    location /css/    { }
    location /js/     { }
    
    
    location / {
        root C:/Workspace/frontend/dist/app-frontend;
        try_files $uri $uri/ /index.html;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
location / {
...sign-in
}

location = / {
...landing
}


https://nginx.org/ru/docs/http/request_processing.html
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы