我正在尝试在 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;
}
}