Я пытаюсь вернуть настраиваемую страницу с ошибкой 400 для запросов без HTTPS в nginx. Я новичок в nginx, но я прочитал много страниц с примерами пользовательских страниц ошибок, и у меня ничего не работает. Моя конфигурация:
server {
listen 80;
error_page 400 /400.html;
location = /400.html {
root /var/www/html;
}
return 400;
}
В возвращение работает, потому что если я изменю код (например, на 401 или 500), я получаю соответствующую страницу ошибки nginx по умолчанию. Я знаю, что файл существует, потому что если я вытащу возвращение он будет обслуживать мою страницу 400.html напрямую без проблем. Но ничего из того, что я пробовал, не приводило к тому, что моя пользовательская страница отображалась, когда я возвращал код ошибки.
Что мне не хватает?
Обновить: Другие варианты, которые я пробовал безрезультатно:
server {
listen 80;
error_page 400 /400.html;
location = /400.html {
root /var/www/html;
}
return 400;
}
server {
listen 80;
root /var/www/html;
error_page 400 /400.html;
location = /400.html {
allow all;
}
return 400;
}
server {
listen 80;
root /var/www/html;
error_page 400 /400.html;
return 400;
}
я нашел этот вопрос о Stackoverflow, который выполняет то, что я искал.
Я думаю, по какой-то причине, хотя возвращение работает внутри сервер блок, он не уважает error_page директивы. Это может быть ошибка или намеренное поведение, которого я не понимаю. Решение состоит в том, чтобы поставить возвращение внутри расположение блок:
server {
listen 80;
root /var/www/html;
error_page 400 /400.html;
location = /400.html {
internal;
}
location / {
return 400;
}
}