Halo 更新时,基于Nginx给网址挂上维护界面

2023-07-14 10:59:08 浏览数 (1)

1. 介绍

本站使用Halo进行搭建的博客系统,搭建在Linux系统之中。同时为了更高效利用服务器资源也端口,进行了nginx代理转发机制。

而Halo还在不断的迭代更新之中。每次系统更新时前端访问页面就会报错:502 Bad Gateway。不够优雅和美观。

想着如何在更新维护的时候,告诉访问者当前网址只是在更新。并不是站长跑路了。

所以就基于Nginx配置了一个更新页面,当Halo升级的时候,大家访问的就是一个静态页面了。

2. 配置

2.1 配置halo.conf

打开位于/etc/nginx/conf.d/ 目录下的halo.conf 文件。(halo.conf 配置了Halo的代理信息。大家要切合自己的实际配置哦)。

操作指令:vim halo.conf 实例:

代码语言:javascript复制
[root@xxxxx123 conf.d]# ls
default.conf  halo.conf
[root@xxxxx123 conf.d]# vim halo.conf

然后在vim的编辑界面中按I进入编辑模式,添加下面实例中的内容:

代码语言:javascript复制
server {
    listen 80;
    ....
   
    return 301 https://$server_name$request_uri;
    client_max_body_size 1024m;
    location / {
        ...
        proxy_pass http://127.0.0.1:8090/;
    }
}

server {
            listen 443 ssl;
            server_tokens off;
            ...
            location / {
                  ...
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_pass http://127.0.0.1:8090/;
            }

            # 添加下面这段内容
            error_page  404 500 502 503 504  /update.html;
            location = /update.html {
                root   /usr/share/nginx/html;  # 表示update.html 文件的路径
                charset utf-8;                  # 避免出现中文乱码,你的页面如果是全英文那么可以不用
            }

}

主要是 error_page 字段 和后面的 location字段。这个的添加不会影响上面的正常访问。

只有是出现了 404500,502,503,504 错误的时候,nginx就会启动update.html页面内容返回。(PS:可以只用配置502 就够了)

我们在Nginx中配置的这些错误码,并不会影响Halo中各种主题效果中的404等错误码。

Halo主题中的错误码,是Halo返回的。而Nginx中配置的错误码是Nginx访问不到Halo了才会返回的错误码。所以两者并不冲突。

配置完毕后按Esc退出编辑模式,通过输入:wq保存文档,退出vim

可以通过nginx -t 检测 配置内容是否规范,实例:

代码语言:javascript复制
[root@xxxxx123 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

输出上面的内容,就代表编辑正常了。下面,我们就要在usr/share/nginx/html 文件夹中添加update.html文件了

2.2 创建update.html文件

我们可以通过windows环境或者其他工具创建好一个静态的update.html文件,然后再通过xftp等工具导入到usr/share/nginx/html 目录下。

也可以通过vim命令,创建并编辑一个简单的update.html 文件。

实例:创建update.html文件

代码语言:javascript复制
[root@xxxxx123 html]# vim update.html

然后在空白文档中 添加内容:

代码语言:javascript复制
<html>
        <head>
                <meta http-equiv="Content-Type" content=“text/html; charset=utf-8”/>
                <title>网站正在更新</title>
        </head>
<body>
    <h3>本网站正在维护更新,请15分钟后尝试......</h1>
       <p> 想了解更多信息,可扫码关注公众号。获取更准确的维护状态.</p>
    <img src="https://img.zinyan.com/file/blog/img202112141727733.png?x-oss-process=style/noban"/>
    <p>PS:如果我更新顺利了,那就好说,更新失败了。那就难搞了</p>
</body>

</html>

上面为我的实例。大家根据自己想展示的内容进行编辑。如果能找前端小伙伴给你设计制作一个更精美的页面。那就更好了。

保存上面的文件之后。我们的配置就完成了。

2.3 刷新Nginx配置,验证效果

我们配置完毕后,就需要通过nginx -s reload 指令 让配置刷新生效。实例:

代码语言:javascript复制
[root@xxxxx123 conf.d]# nginx -s reload

也可以使用:

代码语言:javascript复制
[root@xxxxx123 conf.d]# service nginx reload

两者都是一样的效果。(PS:我的配置上是这样的,如果你的nginx.conf 文件没有配置到service中可能以上操作都会失败)

我们如果想确认自己的效果是否生效,可以通过 service halo stop 指令停止当前正在运行的halo服务,然后刷新页面。

就会出现我们自己定义的update.html 内容了。然后再通过 service halo start 重新启动halo,等待几秒再刷新页面。

就会恢复正常了。实例:

代码语言:javascript复制
[root@xxxxx123 conf.d]# service halo stop         //停止Halo服务
Redirecting to /bin/systemctl stop halo.service
[root@xxxxx123 conf.d]# service halo start        //启动Halo服务
Redirecting to /bin/systemctl start halo.service
[root@xxxxx123 conf.d]# 

以后,我们更新Halo的时候就可以放心更新了。

总结:

  1. 配置nginx.conf 中的 error_page
  2. 创建更新页面。
  3. 刷新Nginx配置。
  4. 停止Halo,检测配置效果。
  5. 恢复Halo

0 人点赞