Невозможно обслуживать статические активы NextJS через Nginx

У меня есть приложение NextJS, работающее на порту 3000, и у меня есть test.ico файл находится в следующем месте:

/static/images/icons/

Я хочу, чтобы этот файл был доставлен вне корня, а не по фактическому пути. Я имею в виду, что вместо https://www.schandillia.com/static/images/icons/test.ico я хочу, чтобы он был доступен как https://www.schandillia.com/test.ico. Я могу легко настроить свой сервер Express для обслуживания этого файла, но я хочу, чтобы Nginx справился с этим. Итак, у меня есть следующая конфигурация, добавленная в мой блок сервера Nginx conf:

location / {
    proxy_pass http://127.0.0.1:3000;
    charset UTF-8;
    proxy_http_version 1.1;
  }
  location /test.ico {
    proxy_pass http://127.0.0.1:3000/static/images/icons/test.ico;
    expires 365d;
    add_header Pragma public;
    add_header Cache-Control "public";
  }
  location ~* \.(?:ico|svg|woff|woff2|ttf|otf|css|js|gif|jpe?g|png)$ {
   proxy_pass http://127.0.0.1:3000;
   expires 365d;
   add_header Pragma public;
   add_header Cache-Control "public";
  }

Тем не менее, https://www.schandillia.com/test.ico сейчас выбрасывает 404. Что я делаю не так?

1 ответ

Решение

Регулярное выражение location имеет приоритет над обычным префиксом location блоки. Смотрите этот документ для деталей.

Вы можете изменить порядок приоритета, используя вместо этого любой из них:

location = /test.ico
location ^= /test.ico
location ~ ^/test.ico
Другие вопросы по тегам