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

介绍

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

要完成本教程,您需要具备一台已经设置好可以使用sudo命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

准备

要开始使用本指南,您需要具有sudo权限的非root用户。您还需要在系统上安装Nginx。

创建自定义错误页面

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

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

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重定向访问(不能由客户端直接请求):

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页面:

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通行证设置的位置时,我们将在我们的自定义500级页面上收到502 Bad Gateway错误:

http://server_domain_or_IP/testing

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

结论

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

想要了解更多关于配置Nginx以使用自定义错误页面的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Configure Nginx to Use Custom Error Pages on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏源码之家

DZ重置ucenter密码的解决方法

1485
来自专栏Java后端技术

使用Maven的assembly插件实现自定义打包

  最近我们项目越来越多了,然后我就在想如何才能把基础服务的打包方式统一起来,并且可以实现按照我们的要求来生成,通过研究,我们通过使用maven的assembl...

1302
来自专栏Java架构师历程

mac执行git命令出现xcrun: error: invalid active developer path解决方法

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools...

2772
来自专栏月牙寂

k8s源码分析-----EndpointController

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

3175
来自专栏魏艾斯博客www.vpsss.net

开启 CDN 后 wordpress 后台打不开的解决办法

4654
来自专栏不想当开发的产品不是好测试

多次grep 没有看到输出

tail -f xxx.log | grep aaaa | grep bbbb 发现没有日志输出 但log中的那条记录包含aaaa 和 bbbb,就是说tail...

2228
来自专栏微信小开发

WXAPKG 解包后如何提取页面逻辑?

前天小程序分发下载执行包,我也下载了一些,用来学习。 按照我的规划,这部分的内容整体会分为4~5次推送完成,首先是配置的提取和页面逻辑的提取,这部分会比较快,很...

2K10
来自专栏一个会写诗的程序员的博客

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun ...

回车后,系统弹出下载xcode,点击确认,下载完成后即可。(实际上不是下载xcode,可能下载xcode有关插件,下载时长约1分钟)

3841
来自专栏杂烩

log4j集成kafka配置文件不生效问题解决

    日志采集使用KF,即kfka+flume,有程序直接输出到kafka,flume拉取存储到文件或 elasticsearch中,但是发现第一次启动程序时...

751
来自专栏吴伟祥

Redis实现消息队列 转

打开浏览器,输入地址,按下回车,打开了页面。于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容。

2541

扫码关注云+社区

领取腾讯云代金券