如何在CentOS7上配置Apache以使用自定义错误页面
介绍
Apache 是世界上最流行的 Web 服务器。 它得到很好的支持、功能丰富且灵活。 在设计网页时,自定义用户将看到的每条内容通常很有帮助。 这包括当他们请求不可用的内容时的错误页面。 在本指南中,我们将演示如何配置 Apache 以在 CentOS 7 上使用自定义错误页面。
先决条件
要开始使用本指南,您需要一个具有 sudo
权限的非 root 用户。 您可以按照我们的 CentOS 7 初始设置指南来设置此类用户。 您还需要在系统上安装 Apache。 按照本指南的第一步了解如何设置。
创建您的自定义错误页面
我们将创建一些自定义错误页面用于演示目的,但您的自定义页面显然会有所不同。
我们将把自定义错误页面放在 CentOS 的 Apache 安装设置其默认文档根目录的 /var/www/html
目录中。 我们将为称为 custom_404.html
的 404 错误创建一个页面,并为称为 custom_50x.html
的一般 500 级错误创建一个页面。 如果您只是测试,可以使用以下行。 否则,请将您自己的内容放在以下位置:
echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /var/www/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 /var/www/html/custom_404.html echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /var/www/html/custom_50x.html echo "<p>We seem to be having some technical difficulties. Hang tight.</p>" | sudo tee -a /var/www/html/custom_50x.html
我们现在有两个自定义错误页面,我们可以在客户端请求导致不同错误时提供服务。
配置 Apache 以使用您的错误页面
现在,我们只需要告诉 Apache,只要出现正确的错误情况,它就应该使用这些页面。 我们可以在 Apache 读取配置片段的 /etc/httpd/conf.d
目录中创建一个新的配置文件。 我们将调用新文件 custom_errors.conf
:
sudo nano /etc/httpd/conf.d/custom_errors.conf
我们现在可以将 Apache 指向我们的自定义错误页面。
将错误直接指向正确的自定义页面
我们可以使用 ErrorDocument
指令将每种类型的错误与相关的错误页面相关联。 基本上,我们只需将每个错误的 http 状态代码映射到我们想要在它发生时提供的页面。
对于我们的示例,错误映射将如下所示:
/etc/httpd/conf.d/custom_errors.conf
ErrorDocument 404 /custom_404.html ErrorDocument 500 /custom_50x.html ErrorDocument 502 /custom_50x.html ErrorDocument 503 /custom_50x.html ErrorDocument 504 /custom_50x.html
仅此更改就足以在发生指定错误时提供自定义错误页面。
但是,我们将添加一组额外的配置,以便客户端无法直接请求我们的错误页面。 这可以防止一些奇怪的情况,即页面的文本引用了错误,但http状态为“200”(表示请求成功)。
直接请求错误页面时响应 404
要实现此行为,我们需要为每个自定义页面添加一个 Files
块。 在里面,我们可以测试是否设置了REDIRECT_STATUS
环境变量。 仅应在 ErrorDocument
指令处理请求时设置。 如果环境变量为空,我们将提供 404 错误:
/etc/httpd/conf.d/custom_errors.conf
ErrorDocument 404 /custom_404.html ErrorDocument 500 /custom_50x.html ErrorDocument 502 /custom_50x.html ErrorDocument 503 /custom_50x.html ErrorDocument 504 /custom_50x.html <Files "custom_404.html"> <If "-z %{ENV:REDIRECT_STATUS}"> RedirectMatch 404 ^/custom_404.html$ </If> </Files> <Files "custom_50x.html"> <If "-z %{ENV:REDIRECT_STATUS}"> RedirectMatch 404 ^/custom_50x.html$ </If> </Files>
当客户端直接请求错误页面时,由于没有设置正确的环境变量,会出现404错误。
为 500 级错误设置测试
我们可以通过请求不存在的内容轻松产生 404 错误来测试我们的配置。 为了测试 500 级错误,我们必须设置一个虚拟代理通道,以便我们可以确保返回正确的页面。
在文件底部添加 ProxyPass
指令。 将 /proxytest
的请求发送到本地机器上的端口 9000(没有运行服务):
/etc/httpd/conf.d/custom_errors.conf
ErrorDocument 404 /custom_404.html ErrorDocument 500 /custom_50x.html ErrorDocument 502 /custom_50x.html ErrorDocument 503 /custom_50x.html ErrorDocument 504 /custom_50x.html <Files "custom_404.html"> <If "-z %{ENV:REDIRECT_STATUS}"> RedirectMatch 404 ^/custom_404.html$ </If> </Files> <Files "custom_50x.html"> <If "-z %{ENV:REDIRECT_STATUS}"> RedirectMatch 404 ^/custom_50x.html$ </If> </Files> ProxyPass /proxytest "http://localhost:9000"
完成后保存并关闭文件。
重新启动 Apache 并测试您的页面
通过键入以下内容来测试配置文件的语法错误:
sudo apachectl configtest
解决报告的任何问题。 当您的文件不包含语法错误时,请键入以下命令重新启动 Apache:
sudo systemctl restart httpd
现在,当您转到服务器的域或 IP 地址并请求一个不存在的文件时,您应该会看到我们设置的 404 页面:
http://server_domain_or_IP/thiswillerror
当您转到我们为虚拟代理通行证设置的位置时,我们将在自定义 500 级页面中收到“503 服务不可用”错误:
http://server_domain_or_IP/proxytest
您现在可以返回并从您的 Apache 配置中删除假代理密码行。
结论
您现在应该为您的网站提供自定义错误页面。 这是一种个性化用户体验的简单方法,即使他们遇到问题也是如此。 对这些页面的一项建议是包含指向他们可以获取帮助或更多信息的位置的链接。 如果您这样做,请确保即使发生相关错误,也可以访问链接目标。