Пользовательские страницы ошибок Nginx, PHP + FPM

115
9

Я пытаюсь создать некоторые пользовательские страницы ошибок, но не могу заставить работать 500.


У меня есть следующая конфигурация:


server {
listen 80;

root /var/www/devsite;
index index.php;
server_name devsite;

error_page 403 = /error.php?code=403;
error_page 404 = /error.php?code=404;
error_page 500 = /error.php?code=500;

location / {
try_files $uri =404;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

}


Сначала я подумал, что это может быть потому, что это файл PHP, поэтому я изменил:


error_page 500 = /error.php?code=500;

На статическую страницу:


error_page 500 /500.html

Но он все еще просто показывает пустую страницу с кодом ответа 500, когда я прерываю некоторый код PHP, чтобы вызвать его.


Затем я попытался сделать это последним правилом внутри location ~ \.php$, но то же самое произойдет. Любые идеи, почему пользовательская страница 500 не будет работать?


Я также замечаю, что если вы попытаетесь получить доступ к файлу с запретом доступа, который имеет расширение .php, он не покажет пользовательскую страницу 403 и не покажет встроенную страницу. Есть ли способ сделать правило также закрытыми .php файлами?

спросил(а) 2021-01-28T01:02:29+03:00 3 месяца, 1 неделя назад
1
Решение
169

Кусок, который вам не хватает, это fastcgi_intercept_errors. Без этой директивы Nginx не будет касаться ответов от CGI-серверов, если они действительны:


Определяет, должны ли ответы сервера FastCGI с кодами, превышающими или равными 300, передавать клиенту или перенаправляться на nginx для обработки с помощью директивы error_page.



Вам нужно поместить следующее в место обработки PHP:

fastcgi_intercept_errors on;

В стороне, вам может не понадобиться = в ваших error_page линиях (в зависимости от вашего предполагаемого использования). Этот синтаксис инструктирует Nginx использовать код ответа, возвращенный с PHP script, на который вы указываете вместо исходного кода ответа:


Если ответ об ошибке обрабатывается прокси-сервером или сервером FastCGI, и сервер может возвращать разные коды ответов (например, 200, 302, 401 или 404)... отвечать кодом, который он возвращает.


ответил(а) 2021-01-28T01:02:29+03:00 3 месяца, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема