当前位置 博文首页 > 一 定 会 去 旅 行:nginx 重定向到系统维护页面

    一 定 会 去 旅 行:nginx 重定向到系统维护页面

    作者:一 定 会 去 旅 行 时间:2021-06-07 18:22

     

    上周末兄弟项目准备扩展服务器以便提供更好的服务,兄弟项目有一些功能是实时提供到我这边的,需要我这边暂时把对应系统功能屏蔽,因为使用nginx,所以可以直接配置nginx重定向到固定系统维护页面。

     

    nginx重定向其实很简单,用return 或rewrite关键字均可,因为重定向后直接跳转到静态页面,不需要后续操作和记录,所以直接301永久重定向。

     

    其中重定向既可以在server中配置,也可以在具体的location 中配置,下面分别简单介绍。

     

    在server中配置:

    http {
        server{
            listen 80;
            server_name A.com;
    
         # 以下return 或 rewrite 选择其中一个就行。其中upgrade.html 是自己写的提示页面
            return 301 http://B.com/upgrade.html;  
            # rewrite ^/(.*)$ http://B.com/upgrade.html permanent;
            location / {
       # 此处省略后面配置内容
         }
      }
    }

     

     或者在location中配置:

    http {
        server{
            listen 80;
            server_name A.com;
    location / { rewrite ^/(.*)$ http://B.com/upgrade.html permanent;
               # 此处省略后面配置内容
         }
      }
    }

     

     

     从以上实例看出,return 用301参数重定向,rewrite用 permanent(当然还可以用break,last,区别的话自己查资料)。

     

     不知道你们有没有发现,以上两个例子中,都是用 A.com 去重定向到 B.com ,我试过,用A.com直接重定向到A.com/upgrade.html,会报错重复次数太多,也就是进入死循环。在同时管理多个域名是可以配置用A重定向B,但是如果只有一个域名A那怎么弄呢?

     

    这时候就用到if条件判断了,此处我们以在server中配置为例说明:

    http {
        server{
            listen 80;
            server_name A.com;        
    
            # 注意 if 后面必须有一个空格!!!
            if ($request_uri !~ "/upgrade.html$") {
                return 301 http://A.com/upgrade.html;
            }
    
            location / {
              # 此处省略后面配置内容
         }
       } 
    } 

     

     

    以上实例说明,当访问路径不包含 /upgrade.html 时就重定向到 upgrade.html,此时能够重定向,不会再有重复次数太多的提示,但有另一个问题,就是upgrade.html中的图片无法显示了,暂时没时间去研究如何避免图片被重定向了,后面有时间再补充。

     

    测试if条件的时候,遇到一个特别坑的事,就是添加if后重启nginx报错:

    Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

    输入 systemctl status nginx.service 可查看错误信息,其中  nginx: [emerg] unknown directive "if($request_uri" 错误查找到答案,原来是if后面必须要有一个空格!!!!,太坑了,网上那些介绍nginx if的文章都没有提到这么重要的信息。。。

     

     

     

    感谢资料:

    if后必须有空格:https://blog.csdn.net/palet/article/details/103394236

    nginx中return和rewrite:https://blog.csdn.net/u010982507/article/details/104025717

     

    bk
    下一篇:没有了