如何在CentOS7上配置Nginx以使用自定义错误页面

来自菜鸟教程
跳转至:导航、​搜索

介绍

Nginx 是一个高性能的 Web 服务器,能够以灵活和强大的方式提供内容。 在设计网页时,自定义用户将看到的每条内容通常很有帮助。 这包括当他们请求不可用的内容时的错误页面。 在本指南中,我们将演示如何配置 Nginx 以在 CentOS 7 上使用自定义错误页面。

先决条件

要开始使用本指南,您需要一个具有 sudo 权限的非 root 用户。 您可以按照我们的 CentOS 7 初始设置指南来设置此类用户。 您还需要在系统上安装 Nginx。 按照 本指南 了解如何进行设置。

创建您的自定义错误页面

我们将创建一些自定义错误页面用于演示目的,但您的自定义页面显然会有所不同。

我们将把自定义错误页面放在 CentOS 的 Nginx 设置其默认文档根目录的 /usr/share/nginx/html 目录中。 我们将为称为 custom_404.html 的 404 错误创建一个页面,并为称为 custom_50x.html 的一般 500 级错误创建一个页面。 如果您只是测试,可以使用以下行。 否则,请将您自己的内容放在以下位置:

echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /usr/share/nginx/html/custom_404.html
echo "<p>I have no idea where that file is, sorry.  Are you sure you typed in the correct URL?</p>" | sudo tee -a /usr/share/nginx/html/custom_404.html
echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /usr/share/nginx/html/custom_50x.html
echo "<p>We seem to be having some technical difficulties. Hang tight.</p>" | sudo tee -a /usr/share/nginx/html/custom_50x.html

我们现在有两个自定义错误页面,我们可以在客户端请求导致不同错误时提供服务。

配置 Nginx 以使用错误页面

现在,我们只需要告诉 Nginx,只要出现正确的错误情况,它就应该使用这些页面。 我们需要调整我们的服务器块。 在 CentOS 7 上,主服务器块位于 /etc/nginx/nginx.conf 文件中。 我们将配置此服务器块,但您应该调整您配置的任何其他服务器块:

sudo nano /etc/nginx/nginx.conf

在文件中,找到定义服务器上下文的块。 我们现在可以将 Nginx 指向我们的自定义错误页面。

将 404 错误定向到自定义 404 页面

CentOS Nginx 配置文件已经使用 error_page 指令定义了一个 404 错误页面。 我们需要更改此设置,以便在发生 404 错误时(未找到请求的文件时),提供您创建的自定义页面。 我们将调整文件的关联位置块,以便我们能够确保根目录与我们的文件系统位置匹配,并且该文件只能通过内部 Nginx 重定向访问(不能由客户端直接请求):

/etc/nginx/nginx.conf

http {

    . . .

    server {

        . . .

        error_page 404 /custom_404.html;
        location = /custom_404.html {
            root /usr/share/nginx/html;
            internal;
        }

        . . .
    }
}

通常,我们不必在新位置块中设置 root,因为它与服务器块中的根匹配。 但是,我们在这里是明确的,因此即使我们将常规 Web 内容和关联的文档根移动到不同的位置,也会提供我们的错误页面。

将 500 级错误定向到自定义 50x 页面

接下来,我们可以添加指令以确保当 Nginx 遇到 500 级错误(服务器相关问题)时,它将服务于我们制作的另一个自定义页面。 这将遵循我们在上一节中使用的完全相同的公式。 这次我们设置多个500级错误全部使用custom_50x.html页面:

/etc/nginx/nginx.conf

http {

    . . .

    server {

        . . .

        error_page 404 /custom_404.html;
        location = /custom_404.html {
            root /usr/share/nginx/html;
            internal;
        }

        error_page  500 502 503 504 /custom_50x.html;
        location = /custom_50x.html {
            root /usr/share/nginx/html;
            internal;
        }

        location /testing {
            fastcgi_pass unix:/does/not/exist;
        }
    }
}

在底部,我们还添加了一个虚拟的 FastCGI 通道,以便我们可以测试我们的 500 级错误页面。 这将无法正常工作,因为后端不存在。 在此处请求页面将允许我们测试 500 级错误是否服务于我们的自定义页面。

完成后保存并关闭文件。

重启 Nginx 并测试你的页面

通过键入以下内容测试配置文件的语法:

sudo nginx -t

如果报告了任何错误,请在继续之前修复它们。 如果没有返回语法错误,请键入以下命令重新启动 Nginx:

sudo systemctl restart nginx

现在,当您转到服务器的域或 IP 地址并请求一个不存在的文件时,您应该会看到我们设置的 404 页面:

http://server_domain_or_IP/thiswillerror

当您转到我们为 FastCGI 通行证设置的位置时,我们将收到一个 502 Bad Gateway 错误,其中包含我们的自定义 500 级页面:

http://server_domain_or_IP/testing

您现在可以返回并从 Nginx 配置中删除虚假的 FastCGI 传递位置。

结论

您现在应该为您的网站提供自定义错误页面。 这是一种个性化用户体验的简单方法,即使他们遇到问题也是如此。 对这些页面的一项建议是包含指向他们可以获取帮助或更多信息的位置的链接。 如果您这样做,请确保即使发生相关错误,也可以访问链接目标。