NGINX 默认错误页面

NGINX 默认错误页面

我正在尝试为我的整个 nginx 服务器(如所有 vhost)设置一个默认的 error_page。

我正在尝试使用以下代码:

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

此外,如果我没有明确编写另一个,我希望能够创建一个 vhost 并使其使用默认的 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 作为绝对路径,而不是将其附加到我的 vhost 的根目录。

你知道怎样做吗?

问候

答案1

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

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

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

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

error_page 404 /404.html;

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

include global404;

答案2

似乎仅当 server/location 中没有其他 error_page 指令时,error_page 才会被继承。因此,要重置服务器的 error_page 404,只需设置其他错误页面,例如:

server {
  error_page 399 /;
}

该服务器不会从“html”块继承error_page 404(以及任何其他)。

答案3

我计划使用include之前提交的方法,但为了彻底起见,我还有一个替代方法:使用符号链接。它仍然需要对您管理的每个虚拟主机进行额外的操作,但它确实提供了不需要进一步更改服务器配置和重新启动的好处。

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

...然后在每个虚拟主机的根目录中...

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

这种方法在我看来不够优雅且不便于移植(如果我有足够的代表来投票赞成或反对,我会投反对票)但它确实有效。

相关内容