NGINX默认错误页面

我试图为我的整个nginx服务器设置一个默认的error_page(如在所有虚拟主机中)。

我正在用下面的代码尝试它:

http { ... ... error_page 404 /var/www/default/404.html; ... ... } 

另外,我希望能够创build一个虚拟主机,并使其使用默认的404.html,如果我不明确写另一个。

就像是:

 server { ... server_name mydomain.com root /var/www/mydomain.com/; ... } 

无论如何,我收到以下错误:

 [error] 16842#0: *1 open() "/var/www/mydomain.com/var/www/default/404.html" failed (2: No such file or directory) 

虽然我明白这个错误,但是我明白为什么会这样,我不明白为什么我不能告诉NGINX默认的error_page是绝对path,而不是附加到我的虚拟主机的根目录。

任何想法如何做到这一点?

问候

正如您已经发现的那样, error_page指令指定了一个与文档root相关的文档。

解决这个问题的一个方法是创build一个单独的文件,其中包含您的错误页面规范,其中包含适当的location块,然后include来自每个使用“全局” error_page server error_page

例如,一个文件/etc/nginx/global404

 location = /404.html { root /var/www/default; } error_page 404 /404.html; 

现在在每个server块中,您将:

 include global404; 

似乎error_page只有在服务器/位置中没有其他error_page指令时才被inheritance。 因此,要重置您的服务器的error_page 404,只需设置其他错误页面,如:

 server { error_page 399 /; } 

这个服务器不会inheritance'html'块中的error_page 404(以及其他)。

我打算使用之前提交的include方法,但是为了彻底,可以使用另一种方法:使用符号链接。 对于您pipe理的每个虚拟主机,仍然需要额外的操作,但确实提供了不需要进一步更改服务器configuration和重新启动的好处。

 http { ... ... error_page 404 /error/404.html; ... ... } 

…然后在每个鬼的根…

 ln -s [path to error page html directory] /[vhost root]/error 

这种方法让我觉得不够优雅和不可移植(如果我有足够的代表来投票选举,那么我就会投票),但是这个方法很有效。