v_decadence
@v_decadence

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

Всем привет.

Есть такой конфиг (nginx + Apache):

location / {
		index index.php;
                proxy_pass http://ip:8080;
		location ~* "^/content/.*\.php$" {
	             return 404;
              }
}


В нём все php файлы из папки content не должны срабатывать.
При запросе /content/index.php всё работает, как нужно.
Но при /content/ nginx находит (должен, по крайней мере) индексный файл и по идее должен ещё раз проходить с ним по набору location, но этого не происходит, запрос уходит на прокси и файл отрабатывает.
Почему так происходит и как сделать, чтобы index.php не срабатывал при запросе /content/?
Вопрос больше для понимания, нежели для практической цели.

Из документации к index: Необходимо иметь в виду, что при использовании индексного файла делается внутреннее перенаправление и запрос может быть обработан уже в другом location’е.
  • Вопрос задан
  • 747 просмотров
Решения вопроса 1
v_decadence
@v_decadence Автор вопроса
Ответ примерно такой: директива index срабатывает, только если nginx собирается отдавать файл с диска и по текущему пути нашлась папка.
Если в текущем location есть proxy_pass / fastcgi_pass, то nginx даже не ищет индексный файл. Соответственно, второй раз по правилам не проходит и отдаёт управление на proxy_pass / fastcgi_pass.

Спасибо Алексей Тен за ответ в комментариях к вопросу.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
> Почему так происходит
Потому что делается запрос к /content/ , а не к /content/index.php.
А значит, обработка запроса остаётся в location /, а не уходит ниже ( а в / у вас есть всё для того, чтобы отдать index.php).

> как сделать, чтобы index.php не срабатывал при запросе /content/
Описать то, что должно происходить в location /content/ (и, кстати, нет смысла особого делать его вложенным в таком случае).
Если должен отрабатывать автоиндекс - так и напишите. Если должна открываться другая индексная страница - так и напишите.
Если должен быть автоиндекс + запрет на php - то так и напишите.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы