• Nginx Location 及静动分离案例


    Nginx Location 及静动分离案例

    面试题:
    rewrite 正则表达式 更换目标 [标志位]
    nginx中rewrite 与location的区别:
    rewrite与location的功能有点像,主要区别 :rewrite实在同一域名内更改获取资源的路径,
    而location是对路径做控制访问或反向代理,可以使用proxy_pass 到其他主机,很多情况
    下rewrite也会写在location里,它们的执行顺序是~
    【1】执行server块的rewrite指令
    【2】执行location匹配
    【3】执行选定的location中rewrite指令
    注意:如果某一部分的URI被重写,则重新循环1到3,直到找到真实存在的文件,循环超
    过10次,则返回500 Internal Server Error的错误(服务器遇到了一个未曾预料的状况,导致
    了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。)
    ······························································································································
    一、nginx正则及location匹配
    1、location规则匹配
    ^~:标识符后面跟一个字符串,匹配字符串后停止对后续的正则表达式匹配
    =:精准匹配
    ~:区分大小写的匹配
    ~*:不区分大小写的匹配
    !~:对区分大小写的匹配取非
    !~*:对不区分大小写的匹配取非
    / :通用匹配,如果没有其它匹配,任何请求都会匹配到
    2、正则表达式
    * :重复前面的字符0次或多次
    ?:重复前面的字符或0次或1次
    + :重复前面的字符1次或多次
    . :匹配除换行符以外的任意1个字符
    (a|b) :匹配a或b
    ^:以……开头
    $:以……结尾
    {n}:重复前面的字符n次
    {n,}:重复前面的字符至少n次
    {n,m}:重复前面的字符n到m次
    *?:重复前面的字符0次或多次;尽可能少重复
    +?:重复前面的字符1次或多次;尽可能少重复
    ??:重复前面的字符或0次或1次;尽可能少重复
    {n,m}?:重复前面的字符n到m次;尽可能少重复
    {n,}?:重复前面的字符至少n次;尽可能少重复
    3、正则表达式补充
    W:匹配不是字母、数字、汉字、下划线的字符
    S:匹配不是空白符的字符
    D:匹配非数字的字符
    B:匹配不是单词开头或结尾的字符
    【a】:匹配单个字符a
    【a-z】:匹配a-z
    【^a-z】:匹配非a-z的字符
    4、Location的应用规则
    location 【=|~|~*|^~|!~|!~*】 /url {……}
    默认值 : no
    使用字段:server
    5、匹配的优先级
    = :精准匹配     优先级最高
    完整路径                  |
    ^~路径            |
    正则表达式           |
    部分路径                              V
    /                                    优先级最低
    6、实际使用建议
    1)直接匹配网站跟,通过域名访问网站首页比较频繁,使用这个会加速处理
    location = / {
       proxy_pass  http://tomcat:8080;
    }
    2)处理静态文件请求。
    目录匹配:
    location ^~ /static/ {
    root /usr/local/nginx/jtml/static;
    }
    后缀匹配:
    location ~* .(gif|jpg|jpeg|png|css|js|ico) {
        root /webroot/res/;
    }
    3)通用规则;用来转发动态请求到后端应用服务器,
    location / {
    proxy_pass http://tomcat:8080/;
    }
    二、rewrite 规则
    1、功能:
    使用nginx提供的全局变量或给自己设置的变量,结合正则表达式和标志位实现url的重写以及重定向,rewrite只能放在server{}、location{}、if{}中,而且只能对域名后边除去传递参数外的字符串起作用。
    2、语法:
    rewrite 正则表达式  更换目标 【标志位】
    执行顺序:
    执行Server块中的rewrite指令
    执行Location匹配
    执行Location中的rewrite指令
    注:如果其中某步的url被重写,则重新执行1-3,知道找到文件,循环超过10次,返回500
    错误
    3、flag标志位
    last : 表示完成rewrite(代表动作结束)
    break :本条规则匹配完后,终止匹配,不在匹配后面的规则
    redirect :返回302临时重定向,浏览器地址栏显示跳转后的地址
    permanent :返回301永久重定向,浏览器地址栏显示跳转后的地址
    注:last一般写在server和if中,而break一般使用在location中
    last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配
    break和last都能组织继续执行后面的rewrite指令
    4、if判断与全局变量
    语法:if (condition) {.....}
    =和!=:比较变量内容
    -f和 !-f:用来判断是否存在文件
    -d和 !-d:用来判断是否存在目录
    -e和 !-e:用来判断是否存在文件或目录
    -x和 !-x:用来判断是否可执行
    5、nginx内置变量
    $args : #这个变量等于请求行中的参数,同$query_string  (?后面的东西)
    $content_length : 请求头中的Content-length字段
    $content_type : 请求头中的Content-Type字段
    $document_root : 当前请求在root指令中指定的值
    $host : 请求主机头字段,否则为服务器名称
    $http_user_agent : 客户端agent信息
    $http_cookie : 客户端cookie信息
    $limit_rate : 这个变量可以限制连接速率
    $request_method : 客户端请求的动作,通常为GET或POST
    $remote_addr : 客户端的IP地址
    $remote_port : 客户端的端口
    $remote_user : 已经经过Auth Basic Module验证的用户名
    $request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成
    $scheme : HTTP方法(如http,https)
    $server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1
    $server_addr : 服务器地址,在完成一次系统调用后可以确定这个值
    $server_name : 服务器名称
    $server_port : 请求到达服务器的端口号
    $request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”
    $uri : 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”
    $document_uri : 与$uri相同
    ··

    ················································· ············································

    作业:

  • 相关阅读:
    关于分布式系统中雷同集群技术及原理,你知道多少?
    如何在PHP中进行会话处理?
    PHP的isset()、is_null、empty()使用总结
    Mycatweb的介绍与搭建
    企业如何部署开源邮箱系统?
    企业如何选择合适的邮箱系统?
    Ansible原理与安装部署
    gRPC的简介与实例详解
    高效的性能测试工具-wrk
    轻松玩转windows之wamp开发环境部署
  • 原文地址:https://www.cnblogs.com/elin989898/p/11905879.html
Copyright © 2020-2023  润新知