![nginx 错误页面和内部指令未按预期工作](https://linux22.com/image/538094/nginx%20%E9%94%99%E8%AF%AF%E9%A1%B5%E9%9D%A2%E5%92%8C%E5%86%85%E9%83%A8%E6%8C%87%E4%BB%A4%E6%9C%AA%E6%8C%89%E9%A2%84%E6%9C%9F%E5%B7%A5%E4%BD%9C.png)
我想设置我的 nginx 服务器以在 HTTP 50x 状态代码上返回特定的错误页面,并且我希望该页面无法通过用户的直接请求获得(例如,http//mysite/internalerror)。
为此,我使用了 nginx 的internal
指令,但我一定是遗漏了一些东西,因为当我将该指令放在我的/internalerror
位置时,当页面崩溃时,nginx 会返回自定义 404 错误(甚至不是我自己的 404 错误页面)。
总而言之,以下是可能发生的情况:
- 回家
- nginx 将查询传递给 Python
- 我正在模拟应用程序错误以获取 502 错误代码
error_page
nginx 尝试从其规则中返回 /InternalError- 由于该
internal
规则,它最终失败并返回自定义 404 错误代码<-- 为什么?文档说error_page
指令与internal
:http://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 后端处理此类请求?