Я меняю код состояния с 403 на 404. Я просто не хочу, чтобы пользователь знал, что существует закрытая страница. Это отлично работает со следующей конфигурацией:
error_page 403 =404 @404;
location @404 {
return 404;
}
Теперь я хотел бы вернуть настраиваемую страницу с ошибкой 404. Но код состояния, отправляемый пользователю, всегда должен быть 404 (когда происходит 403). Как я могу заставить работать оба?
Редактировать:
Я на что-то надеялся. вроде бы это сработает, но это не так.
location @404 {
root /usr/share/nginx/html;
internal;
return 404 "/custom_404.html";
}

Попробуй это:
error_page 404 /404.html;
location = /404.html {
root /var/www/error/;
internal;
}
Проблема заключалась в заявлении deny. Этот оператор блокирует все, включая доступ к любой настраиваемой странице ошибок. Решение состоит в том, чтобы добавить allow all в настраиваемый блок страницы ошибок, чтобы отменить унаследованный отказ.
error_page 403 404 =404 /custom_404.html;
location = /custom_404.html {
allow all;
root /usr/share/nginx/html;
internal;
}
первоисточник:
https://www.cyberciti.biz/faq/unix-linux-nginx-custom-error-403-page-configuration/
Не работает. Nginx игнорирует это из-за оператора return.