nginx:error_page 指令被默默忽略

nginx:error_page 指令被默默忽略

我正在尝试在 nginx 中为非 HTTPS 请求返回自定义 400 错误页面。我是 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;
}

答案1

我发现Stackoverflow 上的问题满足了我的需求。

我想无论出于什么原因,即使返回服务器块,它不尊重任何错误页面指令。这可能是一个错误,或者是一个我不明白的故意行为。解决方案是将返回在里面地点堵塞:

server {
    listen 80;

    root /var/www/html;

    error_page 400 /400.html;
    location = /400.html {
        internal;
    }

    location / {
        return 400;
    }
}

相关内容