您当前的位置:首页 > 新闻 > 科技

Nginx的深思:如何优雅告知用户,网站正在升级维护?

时间:2020-08-10 14:12:26  来源:  作者:

1. 前言

2020-07-30早上到公司后,习惯性的打开掘金首页,想看下有没有自己感兴趣的文章,却意外的看到下面这样的惊喜:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

对的,我升级Lv3了,这是对自己坚持写作1年多的认可与鼓励,难掩心中的开心,我就去发了个掘金沸点,纪念下这个时刻,然后就继续工作了。

中午12点出去吃完饭回到座位后,再次打开掘金首页,哎呀,访问不了了,提示如下:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

此时访问掘金的所有文章,都会看到上面这样的页面,告知你站点要进行维护升级了,很贴心有没有,而且这个界面很好看,我很喜欢。

2. 思考

看到这个页面,你会有什么样的感触?

也许你觉得这很简单,也许你觉得这很Low,都2020了,服务竟然可以停这么久,放在互联网公司,停一分钟都不得了。

抛开互联网公司不说,仅就掘金这次升级维护来说,我觉得很专业,为什么呢?

因为很多网站升级,根本不提示用户的好吗,还跟你专门做个页面,想得美,我就不信你没见过下面这样的:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

记得我参加第1份工作时,有1次晚上发布时,我注意到发布的时间内,我们的域名访问时,跳到了类似于掘金这样的维护通知页面,当时我觉得,这个体验好,这样用户就知道网站为啥不可用了。

但我后面的工作中,我发现并没有人这么做,我也提议过,但有的人没意识,有的人有意识,但觉得这样做没有必要,反正运营知道我们在发布,总之,这个看似简单专业的事情,真的很少有人去做。

但就我个人而言,我觉得这样做是正确的,特别是升级维护期间无法一一告知用户的,这么做真的很专业,用户一看就知道,原来这段时间在维护啊,那我等维护好了继续访问,都说用户体验,这就是用户体验呢。

好了,言归正传,接下来就分享下,如何像掘金这样优雅地进行网站升级维护?

3. 实现

在掘金网站不能访问期间,用Chrome浏览器看下网络请求,发现所有的请求都返回了503的状态码,如下所示:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

503是一个HTTP状态码,代表Service Unavailable(服务不可用),不过这个状况是临时的,并且将在一段时间以后恢复,如果能够预计延迟时间,那么响应中可以包含一个Retry-After头用以标明这个延迟时间。

比如,本次掘金升级维护,它的预计恢复时间是2020-07-31号早上08:00,所以它的Retry-After是给了这个消息的,如下图所示:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

从上图中Server: Nginx,我们可以得知,服务器端使用了Nginx,那么实现的第1步,肯定是要安装Nginx了。

3.1 安装Nginx

首先,去官网下载下Nginx的linux安装包,下载地址:nginx.org/en/download…,我下载的版本是1.18.0:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

然后将下载好的文件上传到Linux服务器,我这里上传的目录是/usr/local,然后切换到/usr/local目录,使用如下命令进行解压:

tar -zxvf nginx-1.18.0.tar.gz
Nginx的深思:如何优雅告知用户,网站正在升级维护?

 


Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

然后切换到nginx-1.18.0目录,为避免后面make命令执行失败,需要先执行以下命令(很重要,不然容易踩坑):

yum install gcc-c++

yum install -y pcre pcre-devel

yum install -y zlib zlib-devel

yum install -y openssl openssl-devel
Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

然后执行命令:

./configure
Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

然后执行make命令进行编译:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

最后执行make install命令安装:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

执行成功后,会发现自动创建了nginx文件夹,如下所示:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 


Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

3.2 启动Nginx

切换到/user/local/nginx/sbin目录,执行如下命令启动Nginx:

./nginx
Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

然后在浏览器里输入地址进行测试,如果看到如下所示的界面,说明Nginx安装成功:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

注意事项:

因为Nginx默认监听的端口号是80,如果你和我一样使用的是阿里云服务器,则需要在安全组规则中添加下端口配置,不然访问不了:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

3.3 配置503页面

这里简单制作个503.html页面(实际使用时可以制作好看一些),并放在Nginx的html目录下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网站维护通知</title>
</head>
<body>
    <img src="/images/snipaste_20200730_194851.png"/>
</body>
</html>
Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

然后修改下conf文件夹下的nginx.conf:

location / {
    return 503;
}

error_page 503 /503.html;
location = /503.html {
    root html;
}
Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

注意事项:每次修改完nginx.conf文件后,一定要记得重启Nginx,不然配置不生效。

Nginx重启命令如下所示:

./nginx -s reload
Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

此时再次在浏览器里访问,发现页面展示的是503.html,但是图片显示不出来:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

很明显,是因为访问图片等静态资源也返回503了,因此需要添加以下配置排除下静态资源:

location ~ .*.(png|ico)?$ {
    root html;
}

注意事项:每次修改完nginx.conf文件后,一定要记得重启Nginx,不然配置不生效。

此时再次在浏览器里访问,503.html页面显示正常(这里偷懒了,页面只有1张图片):

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

完成配置如下:

server {
        listen       80;
        server_name  localhost;
        location / {
            return 503;
        }
        
        location ~ .*.(png|ico)?$ {
            root html;
        }
        
        error_page 503 /503.html;
        location = /503.html {
            root html;
        }
}       

3.4 关闭Nginx

关闭Nginx的命令如下所示:

./nginx -s stop
Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

3.5 小技巧(隐藏版本号)

按照默认的配置,客户端是能看到服务端nginx的版本号的:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

但一般情况下,我们都会将其隐藏,可以通过添加以下配置来实现:

http {
    server_tokens off;
}

然后会发现,客户端不再显示版本号了:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

4. 遗留问题

截止目前,唯一遗留的问题是如何在显示503页面时,在Response Headers中添加Retry-After,试了很多方案,都不行,所以暂时搁置,有知道的读者,欢迎在评论区贴下配置,表示感谢!

4.1 添加Retry-After(2020-08-07更新)

今天早上到公司,看到读者的评论,试了下,添加Retry-After成功(之前失败,是因为没有添加always),在此表示感谢:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

正确的配置如下:

error_page 503 /503.html;
location = /503.html {
    root html;
    add_header Retry-After "Fri, 7 Aug 2020 23:59:00 GMT" always;
}

效果如下所示:

Nginx的深思:如何优雅告知用户,网站正在升级维护?

 

5. 总结

网站升级维护,优雅的通知用户,绝对能提升用户体验,也显得很专业,实现起来也不算难,只是不是所有人都愿意这么做。

基于此问题,本篇讲解了安装Nginx的详细步骤,启动、重启、关闭Nginx的命令,自定义503页面的方法,以及隐藏Nginx版本号的小技巧。

如果条件允许,你是否会在发版时,自定义503页面呢?绝对会显得你很专业,不妨试试吧!

我作者:申城异乡人

链接:https://juejin.im/post/6857673247819989000

来源:掘金



Tags:Nginx   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  Tags: Nginx  点击:(7)  评论:(0)  加入收藏
前言Nginx是前后端开发工程师必须掌握的神器。该神器有很多使用场景,比如反向代理、负载均衡、动静分离、跨域等等。把 Nginx下载下来,打开conf文件夹的nginx.conf文件,Nginx服...【详细内容】
2021-12-08  Tags: Nginx  点击:(18)  评论:(0)  加入收藏
最近客户有个新需求,就是想查看网站的访问情况,由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的页...【详细内容】
2021-10-09  Tags: Nginx  点击:(48)  评论:(0)  加入收藏
安全服务器是只允许所需数量的服务器。理想情况下,我们将通过单独启用其他功能来基于最小系统构建服务器。进行最少的配置也有助于调试。如果该错误在最小系统中不可用,则分别...【详细内容】
2021-09-26  Tags: Nginx  点击:(60)  评论:(0)  加入收藏
在今年的NGINX Sprint 2.0虚拟大会上,NGINX(来自流行的开源web服务器/负载均衡器和反向代理背后的公司F5),发布了NGINX现代应用参考架构(MARA)。该公司在一篇博客文章中说,这将帮...【详细内容】
2021-09-26  Tags: Nginx  点击:(60)  评论:(0)  加入收藏
Ubuntu下安装Nginx一、系统基本信息查看1、查看Ubuntu版本信息:使用命令:cat /proc/version 查看~$ cat /proc/versionLinux version 4.15.0-106-generic (buildd@lcy01-amd6...【详细内容】
2021-09-16  Tags: Nginx  点击:(60)  评论:(0)  加入收藏
出于安全审查或者对于系统安全性的要求,都要求我们生产环境部署的系统需要做一定的权限控制。那么如何简单快速地部署满足安全要求的权限系统呢?其实可以通过nginx的相关功能...【详细内容】
2021-09-07  Tags: Nginx  点击:(69)  评论:(0)  加入收藏
什么是NginxNginx(engine x)是一个高性能的HTTP和反向代理服务器,具有内存少,高并发特点强。1、处理静态文件,索引文件以及自动检索打开文件描述符缓冲2、无缓冲的反向代理加速...【详细内容】
2021-09-02  Tags: Nginx  点击:(70)  评论:(0)  加入收藏
本文适用于 php7.4+NGINX环境,适用于运行 wordpress 环境一、更新服务器sudo apt update二、命令快捷缩写设置通过ssh登录服务器,在用户目录下执行以下命令sudo nano .bashrca...【详细内容】
2021-08-31  Tags: Nginx  点击:(87)  评论:(0)  加入收藏
一、nginx正向代理介绍及配置(需要在客户端配置代理服务器进行指定网站访问)#模块 ngx_http_proxy_module: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy...【详细内容】
2021-08-16  Tags: Nginx  点击:(75)  评论:(0)  加入收藏
▌简易百科推荐
就在今天,腾讯方面宣布将在2022年1月31日下架企业QQ和营销QQ,其实这一消息的降临并不让笔者意外,因为早在今年的10月28日20点之后,企业QQ和营销QQ就被停止了续费服务。相信很多...【详细内容】
2021-12-27  科技探险家    Tags:企业QQ   点击:(4)  评论:(0)  加入收藏
日前,上海交通大学发布《全球电竞之都评价报告》,对全球15个致力于发展电竞之都的城市进行评价,上海作为中国城市电竞发展的排头兵,其拥有众多优质电竞企业及完整产业集群,因此排...【详细内容】
2021-12-27  经济日报    Tags:电竞   点击:(2)  评论:(0)  加入收藏
为优化网络氛围环境,微博又开始整顿用户信息了。本月月初,微博官方发布公告,要求昵称中带有如“二货”“SB”“瘪三”“娘炮”等明显低俗或侮辱性词汇的用户尽快修改,否则将面临...【详细内容】
2021-12-24  运了个营    Tags:微博   点击:(10)  评论:(0)  加入收藏
昨日谷歌宣布,自2022年12月19日开始停止对OnHub的软件支持,OnHub路由器仍将提供Wi-Fi信号,但用户无法用谷歌Home应用程序管理它。无法更新Wi-Fi网络设置、添加额外的Wifi设备或...【详细内容】
2021-12-22  雷峰网    Tags:Google OnHub   点击:(5)  评论:(0)  加入收藏
IT之家 12 月 20 日消息,百度网盘青春版 iOS 客户端今日晚间率先开启内测,安卓客户端将在稍后内测。使用苹果 iPhone 的IT之家小伙伴可以点此下载内测版,需要先下载 TestFlight...【详细内容】
2021-12-21  IT之家    Tags:百度网盘   点击:(9)  评论:(0)  加入收藏
对于拼车单,是接还是不接,不少网约车司机表示很矛盾。接吧,钱少事多,常常跑了个寂寞,不接吧,车多客少,挑三拣四没饭吃。 在平台大力推广拼车单之下,不少司机迫于生活压力,最终还是打...【详细内容】
2021-12-17  网约车情报分享    Tags:滴滴   点击:(7)  评论:(0)  加入收藏
蓝鲸TMT频道12月16日讯,据饿了么官方微信公众号,近日,在圆桌会上,蓝骑士与平台交流了配送安全问题。饿了么表示,线上将技术手段融入安全防护;线下将持续进行安全培训,并试点智能头...【详细内容】
2021-12-17    金融界  Tags:饿了么   点击:(23)  评论:(0)  加入收藏
开源最前线(ID:OpenSourceTop) 猿妹编译项目地址: https://github.com/restic/restic全球知名代码托管平台 GitHub 今天就重磅发布了今年的年度报告&mdash;&mdash;《2021 年度 O...【详细内容】
2021-12-17  Python部落    Tags:   点击:(9)  评论:(0)  加入收藏
新京报快讯 据中国网络视听节目服务协会网站消息,12月15日,中国网络视听节目服务协会发布了《网络短视频内容审核标准细则》(2021)。中国网络视听节目服务协会组织有关短视频平...【详细内容】
2021-12-16    新京报  Tags:短视频   点击:(11)  评论:(0)  加入收藏
今年以来,国家网信办针对一些粉丝量大、关注度高的网站平台“头部账号”法纪意识淡薄,滥用网上影响力,传播错误导向内容,污染网络生态等突出问题,会同相关部门,指导各地网信办,要求...【详细内容】
2021-12-16    网信中国微信公众号  Tags:网信办   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条