Nginx. Отдавать 404 при обращении к файлам .php

ND
На сайте с 09.03.2018
Offline
6
2128

Структура сайта такая:

/var/www/site/web

/var/www/site/src

В качестве единой точки входа используется файл index.php, который расположен в папке web.

Все остальные php файлы проекта расположены в src.

При обращении в браузере по любому адресу который заканчивается на .php (например httр://site.ru/src/config.php или httр://site.ru/sdvasdfasfdasdf.php), появляется ошибка "500 Internal Server Error nginx".

Как сделать так, чтобы вместо 500 отдавалась страница 404?

Мои настройки:



server {
listen 80;
server_name site.ru;
root /var/www/site/web;
index index.php;
error_page 404 /404.php;

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

location ~ \.php$ {
try_files $uri = /404.php;
fastcgi_index index.php;
fastcgi_pass fpm:9000;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
}

Спасибо!

S
На сайте с 30.09.2016
Offline
469
#1

Закройте вообще доступ к этим файлам из сети. Типа deny.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
bums
На сайте с 03.07.2006
Offline
442
#2
NkDev:
появляется ошибка "500 Internal Server Error nginx".

500 это ошибка сервера, может лучше найти и пофиксить ошибку чем мудрить с 404.

В error логе что пишется?

И если содержимое каталога src не участвует в работе сайта и не должно быть доступно по http, то лучше вынести этот каталог за пределы DOCUMENT_ROOT, уровнем выше.

Недорогая регистрация и продление доменов RU/SU/РФ/COM/NET/ORG/и т.д. ( https://www.regnic.name/?sesign ) в РЕГРУ, РЕГТАЙМ, Р01, РУЦЕНТР. А так же хостинг и SSL сертификаты.
S
На сайте с 30.09.2016
Offline
469
#3
bums:
И если содержимое каталога src не участвует в работе сайта и не должно быть доступно по http

Немного неправильная формулировка: полагаю, что содержимое каталога в работе сайта участвует, но php-файлы участвуют не по http, а инклудом. И там могут быть файлы стилей и жабаскрипта, которые, в отличие от .php, должны быть доступны по http.

ND
На сайте с 09.03.2018
Offline
6
#4
bums:
500 это ошибка сервера, может лучше найти и пофиксить ошибку чем мудрить с 404.
В error логе что пишется?

Вот что в логах:

2018/05/11 08:17:20 [error] 5#5: *32 rewrite or internal redirection cycle while internally redirecting to "/404.php", client: 172.18.0.1, server: site.ru, request: "GET /src/config.php HTTP/2.0", host: "site.ru"

2018/05/11 08:18:49 [error] 5#5: *32 rewrite or internal redirection cycle while internally redirecting to "/404.php", client: 172.18.0.1, server: site.ru, request: "GET /sdvasdfasfdasdf.php HTTP/2.0", host: "site.ru"

bums:

И если содержимое каталога src не участвует в работе сайта и не должно быть доступно по http, то лучше вынести этот каталог за пределы DOCUMENT_ROOT, уровнем выше.

В файле web/index.php всего одна строка:


<?php
require_once __DIR__ . "/../src/route.php";

этот файл только принимает запрос от пользователя.

Все файлы проекта распологаются в src.

Небольшое дополнение!

Насколько я понял роблема была в этой строчке:

try_files $uri = /404.php;

Файла такого по адресу /var/www/site/www нет, поэтому происходит зацикливание.

Частично заработало после добавления следующей строки:


location ~ \.php$ {
root /var/www/site/src;
...
}

Однако появилась другая проблема:

При обращении к НЕсуществующему файлу, например httр://site.ru/sdvasdfasfdasdf.php, появляется моя страница 404 - как и положено.

Но при обращении к существующему файлу, например httр://site.ru/config.php запускается скрипт!

Как мне запретить прямой запуск php скриптов из браузера, расположенных в папке src ?

G-and-Y
На сайте с 29.06.2013
Offline
156
#5

location /config.php {

return 404;

}

Для определенных файлов, если б вас файлы были в определенной папке можно было закрыть к дериктории

так

location /engine/ {

return 404;

}

Абузо-устойчивые впс в Нидерландах от 5$/мес (https://cp.inferno.name/aff.php?aff=2991)
S
На сайте с 30.09.2016
Offline
469
#6
NkDev:
Как мне запретить прямой запуск php скриптов из браузера, расположенных в папке src ?

"Чукча не читатель?"

Sitealert:
Закройте вообще доступ к этим файлам из сети.
ND
На сайте с 09.03.2018
Offline
6
#7

Добавил такой блок:

    location ~ ^/src/.+\.php$ {
deny all;
}

Последняя проблема которая осталась, это то что теперь при обращении по любому адресу, который оканчивается на .php появляется страница nginx об ошибке 404 "404 Not Found nginx" а мне бы хотелось чтобы отдавалась моя красивая страница.

Прописать try_files $uri = /src/404.php я не могу, т.к. будет появляться 403 Forbidden.

Замкнутый круг какой то получается.

Как вариант думаю положить рядом с index.php файл 404.php но мне кажется все должно быть намного проще. Сейчас конфиг выглядит так:

server {
listen 80;
server_name site.ru;
root /var/www/site;
index index.php;
error_page 404 /404.php;

location / {
try_files $uri /web/index.php;
}

location ~ ^/src/.+\.php$ {
deny all;
}

location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass fpm:9000;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
}
S
На сайте с 30.09.2016
Offline
469
#8
NkDev:
/src/404.php

А как насчёт /src/404.html? :) Или если php, то не /src, а в другом месте? Тут вроде как много вариантов.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий