NGINX 默认错误页面

ale*_*nst 7 nginx errordocument

我正在尝试为我的整个 nginx 服务器设置一个默认的 error_page(就像所有虚拟主机一样)。

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

http {
    ...
    ...
    error_page 404 /var/www/default/404.html;
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

就像是:

server {
    ...
    server_name mydomain.com
    root /var/www/mydomain.com/;
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

虽然我确实理解错误,并且我确实理解它为什么会发生,但我不明白为什么我不能告诉 NGINX 使用默认的 error_page 作为绝对路径而不是将它附加到我的 vhost 的根目录。

知道如何制作吗?

问候

Mic*_*ton 9

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

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

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

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

error_page 404 /404.html;
Run Code Online (Sandbox Code Playgroud)

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

include global404;
Run Code Online (Sandbox Code Playgroud)

  • 这确实是一个解决方案,但并不完美。难道真的没有什么方法可以告诉 NGINX 使用默认的 error_page 而不必将它放在每个服务器上{}吗? (2认同)