Рейтинг:2

Как сопоставить местоположение с путем в NGINX

флаг vn

У меня есть настройка nginx, где мне нужно сопоставить определенные пути URL-адресов с путями сервера. Например, мне нужно пример.test/myapp/ перейти в следующий каталог на сервере: /приложения/мое приложение/веб

Я попытался добавить следующий блок местоположения:

местоположение /myapp/
{
    корень /приложения/myapp/веб;
}

но если я пойду в пример.test/myapp/ или же пример.test/myapp Я получаю 404.

Насколько я могу судить по документы это место должно захватывать все, что начинается с пути /мое приложение/ и это единственный блок локации на сервере, так что нет никаких шансов на конфликт. Также я попытался изменить местоположение, чтобы указать на корень (т.е. место расположения /) и работает нормально, так что это не проблема неправильного пути к серверу или отсутствующих файлов. Что мне не хватает?

Рейтинг:5
флаг us

nginx разрешает пути к файлам, используя следующую стратегию:

  1. Использовать путь от корень директива
  2. Добавьте URI из запроса после директивы.

Теперь, в вашем случае:

  1. корень является /приложения/мое приложение/веб.
  2. URI от пример.test/myapp/ является /мое приложение/.

Поэтому nginx ищет файлы в /приложения/мое приложение/веб/мое приложение/ каталог для этого запроса.

Если ты хочешь этого /мое приложение/ URI будет получать файлы из /приложения/myapp/веб/ каталог, вам нужно использовать псевдоним директива:

местоположение /myapp/ {
    псевдоним /apps/myapp/web/;
}
флаг vn
Спасибо! Где я повернулся, так это в примере в документах, где говорится: `location ~ \.(mp3|mp4) { root /www/media; }` вернет все видеофайлы в `www/media`. Таким образом, расположение префикса добавляет URI, а расположение регулярного выражения — нет?
флаг us
Да, регулярные выражения не добавляют URI, потому что трудно определить, какая часть совпадения регулярного выражения должна быть добавлена.
флаг co
@Mattia Нет, местоположения регулярных выражений следуют тому же правилу, что и обычные блоки местоположений, URL-адрес `/myapp/test.mp4`, корень `/www/media` становится `/www/media/myapp/test.mp4`
флаг vn
использование псевдонима приводит к возврату 403 для всего. (Я знаю, что на самом деле это не проблема с разрешениями, так как я смог серверировать файлы с другими блоками местоположения). Это было исправлено путем добавления завершающей косой черты к псевдониму: `alias /apps/myapp/web/`. Не уверен, почему это...
флаг us
Интересно. Я сам не использую псевдоним, поэтому я не знал, что в конце требуется косая черта. Хорошо, что вы это поняли, я обновил свой ответ.

Ответить или комментировать

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