• nginx的重定向(rewrite)


    1、location 匹配
    location匹配的就是后面的URL,对访问的路径做访问控制或者代理转发

    共有三个匹配:精确匹配、正则匹配、一般配

    a、精确匹配

    格式:location=/ 对字符串进行完全匹配,必须完全合

    c、正则匹配

    ^~:前缀匹配 以什么为开头,如果匹配成功,则不再匹配其它的正则匹配的location。

    ~:区分大小写的匹配

    ~*:不区分大小写

    !~:区分大小写的区分

    !~*:不匹配大小的取反

    c、一般匹配(通用匹配)

    location  /字符串

    2、location 优先级以及原则
    优先级:精确>正则>一般

    优先级总结:

    location= 最高,必须是完整路径

    location= 1.jpg 每一位都需要一摸一样否则匹配不到

    location= 完整路径 > location ^~ > location~ location ~* >location /部分起始位置 >location /

    实际网站中的使用规则:

    location= / {

    root html;

    index index.html index.htm index.php;

    }

    网站首页

    第二个必选的规则:处理静态请求的页面

    location^~ /static /{

    root/web/sataic/

    index index.html index.htm;

    }

    用来匹配静态页面

    location ~* \.(jpg.gif|png|jpeg|css)$ {

    root /web/pirturs/;

    idnex index.html index.tml;

    }

    访问图片或者指定的后缀名

    第三个规则,一般通用规则,用来转发.php .js 为后缀的动态请求到后端服务器(数据库)

    location / {

    proxy_pass

    }

    转发后端请求和负载均衡

    3、rewrite重定向
    rewrite就是把当前访问的页面跳转到其他页面

    rewrite工作方式,通过nginx的全局变量或者是自定义变量,结合正则表达式和标志位实现url的重定向,对访问的域名或者域名内的URL路径地址重写。

    4、rewrite 和 location区别
    从功能看 rewrite 和 location都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。

    5、nginx的变量
    $url 客户端另外的url地址

    $host 请求的主机名

    $http_user_agent :客户端请求的浏览器和操作系统

    $http_referer:请求头的fefrr的信息模式当前页面来源的url

    $remote_addr 客户端的IP地址

    $remote_port 客户端的端口

    $server_port 服务端的端口号

    $server_addr 服务端的ip地址

    $request_method 获取客户端请求的方法

    $scheme请求的协议,要么是http 要么是https

    x_forward_for :用来获取请求头当中客户端的真实ip地址,代理服务器添加,在代理服务器中指示客户端的ip地址

    X-Real-IP: 客户端真实的ip地址

    6、标志位
    flag:(四种)

    permanen 永久重定向。返回码是301 浏览器地址会显示跳转后的url地址 (方便搜索引擎可以被搜索到)

    redirect 临时重定向,返回码302 浏览器地址会显示跳转后url地址

    break 永久重定向 返回码也是301 但是他匹配到规则之后不会在向下匹配其他规则,url 也不会发生变化

    last 重定向但是会继续向下匹配其他的location规则

    7、rewrite的执行顺序
    1、server模块的rewrite优先级最高

    2、匹配location的规则

    3、执行选定的location规则

    8、rewrite的语法
    rewrite 正则表达式 跳转后的内容 标志位;

    在重定向的过程中使用last方式进行重定向,但是没有结束语,陷入了死循环,nginx会自动循环10次

    last最多只能执行10次,超过10次没有结束就会停止,然后保存500

    将结束语last改成break避免死循环

    9、实验 基于域名进行跳转,老的不用了,但是依然可以访问,统统跳转到新的域名
    宿主机 :192.168.10.20 域名www.xy102.com

    1. if ( $host = 'www.xy102.com' ){
    2. rewrite ^/(.*)$ http://www.zlm.com/$1 permanent;

    在/etc/hosts目录下进行本地映射

    在虚拟机自带的浏览器对域名www.xy102.com进行访问,域名跳转到www.zlm.com只域名跳转,内容不变

    10、实验:基于ip进行跳转,公司有新业务上线,测试阶段,其他的ip只能显示维护中,只有本机能正常访问
    设置一个变量名,变量名rewrite值是true,接下来判断ip是否合法,true进行跳转,如果是false跳转到错误页面

    1. set $rewrite true;
    2. if ( $remote_addr = "192.168.10.20" ){
    3. set $rewrite false;
    4. }
    5. if ( $rewrite = true ){
    6. rewrite (.+) /error.html;
    7. }
    8. location = /error.html {
    9. root html;
    10. index index.html;
    11. }

    error.html的内容

    使用宿主机192.168.10.20对192.168.10.20进行访问

    使用192.168.10.30对192.168.10.20进行访问

  • 相关阅读:
    PostgreSQL、KingBase 数据库 ORDER BY LIMIT 查询缓慢案例
    springboot常用注解
    汽车驾驶任务的隐马尔可夫模型识别方法研究
    Swift 周报 第十期
    Mac下通过nvm管理node
    初识 kubernetes
    JVM调优案例分析(4)
    css3详解
    【通信原理】第三章 -- 随机过程[下]
    开学季征文 | 一位开发实习生的真情流露
  • 原文地址:https://blog.csdn.net/JeremyHao07/article/details/140317714