NGINX - обслуживание нескольких SPA на одном сервере - PullRequest
1 голос
/ 28 мая 2020

У нас есть сервер разработки с множеством одностраничных приложений, которые также обрабатывают маршрутизацию во внешнем интерфейсе.

Обычно для одностраничного приложения я предполагаю, что вам нужно настроить что-то вроде:

location /some/path {
  try_files $uri $uri/ /index.html?$args;
}

Теперь на нашем сервере разработки довольно много работы по перенастройке nginx для каждого небольшого тестового приложения, которое люди там устанавливают.

Я хочу:

  • Показывать файл, если он найден
  • Показывать индекс. html файл, если путь - папка
  • Если не найден, go верните одну папку и попробуйте ищите index. html и обслуживайте его
  • Попробуйте предыдущий шаг, пока не найдете index. html file
  • Прекратите попытки, когда вы достигнете определенного пути root, например / some / путь, если у него нет индекса. html, вернуть содержимое папки

Если какое-то время l oop невозможно (производительность менее критична, так как это для целей разработки только), я мог ограничить его до 6 папок назад. Это должно охватывать большинство SPA.

Пример:

Допустим, у меня есть одностраничное приложение на:

/some/path/my-app

И одно идет по адресу:

/some/path/my-app/page1/subpage2/id3

Следует попробовать:

  • / some / path / my-app / page1 / subpage2 / id3 (нет совпадения)
  • / some / path /my-app/page1/subpage2/id3/index.html (нет совпадений)
  • / some / path / my-app / page1 / subpage2 / index. html (нет совпадений)
  • / some / path / my-app / page1 / index. html (нет совпадения)
  • / some / path / my-app / index. html (СООТВЕТСТВИЕ!)

PS Я в основном фронтенд-разработчик, мои nginx знания очень ограничены.

1 Ответ

1 голос
/ 28 мая 2020

Вы можете использовать указанное местоположение в качестве последнего параметра оператора try_files для выполнения внутреннего rewrite для подъема вверх по дереву каталогов. Nginx ограничит это примерно 10 итерациями перед объявлением перенаправления l oop.

Например:

root /path/to/root;
index index.html;

location / {
    try_files $uri $uri/ @rewrite;
}
location @rewrite {
    rewrite ^/(.+/)?. /$1 last;
}

Директивы index и try_files обрабатывают поиск index.html, а оператор rewrite усекает URI, удаляя один или несколько символов, следующих за /.

...