Назад | Перейти на главную страницу

nginx: директива error_page игнорируется.

Я пытаюсь вернуть настраиваемую страницу с ошибкой 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;
    }
}