nginx:error_page指令被默默的忽略

我试图返回nginx中的非HTTPS请求的自定义400错误页面。 我是nginx的新手,但是我已经阅读了很多页面的自定义错误页面的例子,似乎没有任何工作。 我的configuration:

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; } }