Nginx конфиг СПА - PullRequest
       4

Nginx конфиг СПА

1 голос
/ 09 апреля 2020

Мне нужна помощь с nginx config для SPA. Я сделал мой из кусочков, которые мне удалось гуглить, но я не понимаю, как это работает.

Что мне нужно:

1) Служить stati c files

location ~ \.(css|js|svg|woff|woff2|ico|ttf|eot|jpe?g|png|txt)$ {          
  try_files $uri $uri/ =404;
  expires 1y;
  add_header Cache-Control "public"; 
}

Если файл не найден, я возвращаю 404. Это нормально, если я просто ввожу неправильное имя файла в URL, но если я ввожу неправильное имя файла в своем индексе. html вместо страницы 404, я получаю пустую страницу. Это должно быть так?

2) Запросы на / api необходимо перенаправлять на бэкэнд Node

location /api {
  try_files '' @proxy;
}

location @proxy  {
  proxy_pass http://localhost:3000;
}

Я не совсем уверен в этой строке, если это должно смотри так

try_files '' @proxy;

3) И самая большая проблема: запросы, которые не совпадают ни с чем, должны возвращать индекс. html

location / {
  try_files '' /index.html;
  expires -1;
}

location = /index.html {
  expires -1;
}

Насколько я понимаю, перенаправления первого блока все неизвестные запросы на индекс. html, но я не понимаю, как второй блок обслуживает этот индекс. html. Я не пишу для обслуживания этого файла, директивы try_files нет.

1 Ответ

0 голосов
/ 09 апреля 2020

1) Служите stati c файлов

Ваше решение прекрасно. Это необходимо только в том случае, если вам требуется установить разные элементы управления кэшем и заголовки истечения срока действия для этих URI. Оператор try_files не является обязательным, поскольку он аналогичен поведению по умолчанию.

2) Запросы к / api необходимо перенаправлять на внутренний сервер Node

Ваше решение может быть упрощенным до:

location /api {
    proxy_pass http://localhost:3000;
}

Это обработает любой URI, который начинается с /api , если не соответствует регулярному выражению на шаге (1). Вы можете избежать этого, используя оператор ^~. Подробнее см. в этом документе .

3) И самая большая проблема: запросы, которые не соответствуют чему-либо, должны возвращать индекс. html

Это обычно реализуется следующим образом:

location / {
    try_files $uri $uri/ /index.html;
    ...
}

Если запрос не соответствует любому другому location, файлу или каталогу, URI будет внутренне переписан в /index.html. Подробнее см. в этом документе .

...