NginX и своя страница ошибки 404

12
Алексей Теплов
На сайте с 30.12.2019
Offline
52
124

Здравствуйте!

Сайт под управлением NginX в конфиге выставлена своя страница на ошибку 404 - 404.html Как бы всё работает, но есть нюансы, вообщем когда запрашивают удалённую новость скрипт делает инклайд 404.php, но запускается почему то 404.html! Эти страницы немного разные потому и заметил.

Первой строкой в файле 404.php стоит:

header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");

Возможно из за этого запускаетя 404.html? А как тогда правильно выдать 404 ошибку? Будет ли правильным такой вызов  странички ошибки

header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");

exit;

Я проверил такой вызов 404 работает...

Y
На сайте с 29.05.2006
Offline
157
#1
может дело в fastcgi_intercept_errors ?
E
На сайте с 01.10.2017
Offline
140
#2
Алексей Теплов :
Как бы всё работает, но есть нюансы, вообщем когда запрашивают удалённую новость скрипт делает инклайд 404.php, но запускается почему то 404.html!

Это может зависеть от настроек. Когда скрипт возвращает страницу (статус) 404, она может подменяться соответствующей серверной.

Обычно делается наоборот: ответ скрипта не подменяется. И только в самых критических случаях может выводиться серверная страница ошибки.

P.S. Иногда бывает, что сам скрипт в качестве содержимого страницы ошибки выдает статический файл (404.html, etc.). Этот подход частенько использовали в устаревших программных каркасах, т.е. без фронт-контроллера.

Домены на продажу: https://p20.ru/collection/domains-for-sale
LEOnidUKG
На сайте с 25.11.2006
Offline
1785
#3
Конфиг бы nginx показали, было бы понятнее.
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
Алексей Теплов
На сайте с 30.12.2019
Offline
52
#4
LEOnidUKG #:
Конфиг бы nginx показали, было бы понятнее.

В конфиге NginX прописал вот так:

 error_page 404 /404.html;
        location = /404.html {
        root /var/www/site.ru/data/www/hd2k.ru;
        internal;
    }
LEOnidUKG
На сайте с 25.11.2006
Offline
1785
#5
Алексей Теплов #:

В конфиге NginX прописал вот так:

Отлично, а обработка PHP как идёт?

По сути ошибка 404 nginx нужна исключительно для файлов, физических, которые он не может найти. Картинки, стили и т.д. Всё остальное если там rewrite должно быть завёрнуто на index.php и там раскидываться какие данные выводить.

Алексей Теплов
На сайте с 30.12.2019
Offline
52
#6
location @php {
                include /etc/nginx/vhosts-resources/hd2k.ru/dynamic/*.conf;
                fastcgi_index index.php;
                fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@hd2k.ru";
                fastcgi_pass unix:/var/www/php-fpm/16.sock;
                fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
                try_files $uri =404;
                include fastcgi_params;
        }

Алексей Теплов
На сайте с 30.12.2019
Offline
52
#7

Ну вообщем сайт работает на PHP 8 почему то через некоторое время начинает подвисать, приходится перезапускать PHP 8... Перевёл сайт даже на PHP 7, вроде работает. У меня как то была проблема на одном сайте, забыл поставить команду exit; после редиректа через хедер и вот тут похожая проблема.

Хотя конечно возможно проблема и не в 404...

Вот я и спрашиваю, как правильно выдать 404 ошибку? 

LEOnidUKG
На сайте с 25.11.2006
Offline
1785
#8
Алексей Теплов #:
У меня как то была проблема на одном сайте, забыл поставить команду exit; после редиректа через хедер и вот тут похожая проблема.
После редиректа ничего не должно быть, поэтому exit обязательный.
Алексей Теплов
На сайте с 30.12.2019
Offline
52
#9

Да я знаю, просто забыл тогда поставить команду...

Непонятное происходит с моей страницей 404. В локалке под Апачем проходит

include($_SERVER['DOCUMENT_ROOT']."/404.php");
 А на сервере тоже проходит, но после модификации хедера в первой строчке получается по сути редирек на 404.html! Вот я и думаю что надо ставить exit... 
master32
На сайте с 09.02.2022
Offline
134
#10
Алексей Теплов :
А как тогда правильно выдать 404 ошибку?
можно так:
    http_response_code(404);
    require $_SERVER['DOCUMENT_ROOT'] . '/404.php';
    exit;

в php-location должно действовать:
fastcgi_intercept_errors off;


12

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