Рейтинг:3

Почему nginx возвращает код состояния 301 при попытке открыть каталог?

флаг zm

Я пытаюсь понять, как работает Nginx. Сейчас я работаю над показатель и try_files директивы. Мой конфигурационный файл таков:

События {}
http {
  перезаписать_журнал;
  error_log /var/log/nginx/localhost.error_log отладка;

  сервер {
    корень /приложение;
    слушать 8080;
    индекс index.html;
    место расположения / {
      try_files $uri $uri/ =404;
    }
  }
}

Также /приложение/ каталог дерева:

/приложение
|-- abcd.html
|-- файл.php
|-- index.html
|-- index.php
|-- сс
| `-- index.html
|-- стиль.css
`-- thumb.png

Когда я пытаюсь открыть локальный: 8080 все работает как положено. Сначала он использует место расположения / контекст. Затем использует $ури/ для чтения корневого каталога. Затем, поскольку было указано имя файла индекса, он использует файл индекса в этом каталоге. Кроме того, файл журнала может показать, что:

...
27.10.2021 11:37:49 [отладка] 1297#1297: *1 тестовое местоположение: "/"
27.10.2021 11:37:49 [отладка] 1297#1297: *1 с использованием конфигурации "/"
...
27.10.2021 11:37:49 [отладка] 1297#1297: *1 общая фаза: 12
27.10.2021, 11:37:49 [отладка] 1297#1297: *1 попытка обработчика файлов
27.10.2021 11:37:49 [отладка] 1297#1297: *1 HTTP-скрипт var: "/"
27.10.2021 11:37:49 [отладка] 1297#1297: *1 попытка использовать файл: "/" "/app/"
27.10.2021 11:37:49 [отладка] 1297#1297: *1 HTTP-скрипт var: "/"
27.10.2021 11:37:49 [отладка] 1297#1297: *1 попытка использовать каталог: "/" "/app/"
27.10.2021, 11:37:49 [отладка] 1297#1297: *1 попытка uri файла: "/"
27.10.2021 11:37:49 [отладка] 1297#1297: *1 общая фаза: 13
2021/10/27 11:37:49 [отладка] 1297#1297: *1 фаза содержания: 14
27.10.2021 11:37:49 [отладка] 1297#1297: *1 открытый индекс "/app/index.html"
27.10.2021 11:37:49 [отладка] 1297#1297: *1 внутреннее перенаправление: "/index.html?"
...

Но когда я открываю локальный: 8080/sss, Сначала он отвечает перенаправлением на локальный хост: 8080/sss/, затем открывает индексный файл внутри ссс/ каталог. Вот журналы:

27.10.2021 11:46:07 [отладка] 1297#1297: *3 тестовое местоположение: "/"
27.10.2021 11:46:07 [отладка] 1297#1297: *3 с использованием конфигурации "/"
27.10.2021 11:46:07 [отладка] 1297#1297: *3 http cl:-1 max:1048576
2021/10/27 11:46:07 [отладка] 1297#1297: *3 фаза перезаписи: 3
27.10.2021, 11:46:07 [отладка] 1297#1297: *3 фаза пост-перезаписи: 4
2021/10/27 11:46:07 [отладка] 1297#1297: *3 общая фаза: 5
...
27.10.2021, 11:46:07 [отладка] 1297#1297: *3 попытка обработчика файлов
27.10.2021 11:46:07 [отладка] 1297#1297: *3 HTTP-скрипт var: "/sss"
27.10.2021 11:46:07 [отладка] 1297#1297: *3 попытка использовать файл: "/sss" "/app/sss"
27.10.2021 11:46:07 [отладка] 1297#1297: *3 HTTP-скрипт var: "/sss"
27.10.2021 11:46:07 [отладка] 1297#1297: *3 попытка использовать каталог: "/sss" "/app/sss"
27.10.2021, 11:46:07 [отладка] 1297#1297: *3 попробуйте uri файла: "/sss"
2021/10/27 11:46:07 [отладка] 1297#1297: *3 общая фаза: 13
2021/10/27 11:46:07 [отладка] 1297#1297: *3 фаза содержания: 14
...
2021/10/27 11:46:07 [отладка] 1297#1297: *3 фаза содержания: 18
27.10.2021 11:46:07 [отладка] 1297#1297: *3 http имя файла: "/app/sss"
27.10.2021 11:46:07 [отладка] 1297#1297: *3 добавить очистку: 000055AA4A146290
27.10.2021, 11:46:07 [отладка] 1297#1297: *3 http static fd: -1
27.10.2021, 11:46:07 [отладка] 1297#1297: *3 http каталог
27.10.2021 11:46:07 [отладка] 1297#1297: *3 HTTP-запрос финализации: 301, "/sss?" а:1, в:1
27.10.2021 11:46:07 [отладка] 1297#1297: *3 Специальный ответ http: 301, "/sss?"
27.10.2021, 11:46:07 [отладка] 1297#1297: *3 http set discard body
...

Почему он не ответил индексным файлом внутри ссс/ каталог, как и корневой каталог, без внешнего перенаправления?

Рейтинг:3
флаг jp

$ури/ срок на try_files оператор работает так же, как поведение Nginx по умолчанию.

Если вы укажете URI без замыкающий / который указывает на каталог, Nginx сначала добавит конечный / используя внешнее перенаправление (т.е. 301).

Если вы укажете URI с замыкающий / который указывает на каталог, показатель директива будет вызвана и может генерировать внутреннее перенаправление на любой указанный файл (например, index.html).

Хотя документация ясно, что отставание / требуется показатель директива. Я не могу найти, где задокументировано прежнее поведение.

флаг zm
Так почему же на первый запрос не отвечает внешнее перенаправление, даже если в конце нет `/`? то есть «локальный хост: 8080». Также в контексте местоположения я указал попробовать файл с добавленным конечным `/`.
Richard Smith avatar
флаг jp
У него есть завершающий `/`. Адресная строка вашего браузера скрывает это от вас, но сервер получает URI как `GET/` — см. журнал доступа.

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

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