nginx 错误页面和内部指令未按预期工作

nginx 错误页面和内部指令未按预期工作

我想设置我的 nginx 服务器以在 HTTP 50x 状态代码上返回特定的错误页面,并且我希望该页面无法通过用户的直接请求获得(例如,http//mysite/internalerror)。

为此,我使用了 nginx 的internal指令,但我一定是遗漏了一些东西,因为当我将该指令放在我的/internalerror位置时,当页面崩溃时,nginx 会返回自定义 404 错误(甚至不是我自己的 404 错误页面)。

总而言之,以下是可能发生的情况:

  1. 回家
  2. nginx 将查询传递给 Python
  3. 我正在模拟应用程序错误以获取 502 错误代码
  4. error_pagenginx 尝试从其规则中返回 /InternalError
  5. 由于该internal规则,它最终失败并返回自定义 404 错误代码<-- 为什么?文档说error_page指令与internalhttp://wiki.nginx.org/HttpCoreModule#internal

以下是 nginx.conf 的摘录,其中有几条注释指出了一些问题:

error_page  404 /NotFound;
error_page  500 502 503 504 =500 /InternalError; # HTTP 500 Error page declaration

location / {
    try_files /Maintenance.html $uri @pythonbackend;
}

location @pythonbackend {
    include uwsgi_params;
    uwsgi_pass unix:///tmp/uwsgi.sock;
}

location ~* \.(py|pyc)$ { # This internal location works OK and returns my own 404 error page
    internal;
}

location /__Maintenance.html { # This one also works fine
    internal;
}

location ~* /internalerror { # This one doesn't work and returns nginx's 404 error page when I trigger an error somewhere on my site
    internal;
}

非常感谢您的帮助!!

答案1

使用“~*”来表示 /internalerror 位置没有多大意义,使用普通位置就可以了。

您收到 404 错误,因为缺少 /InternalError 文件。您是否打算从 uwsgi 后端处理此类请求?

相关内容