美文网首页Nginx高端成长之路
Nginx location指令和rewrite指令,root和

Nginx location指令和rewrite指令,root和

作者: 沐兮_d64c | 来源:发表于2017-11-19 03:46 被阅读118次

    1,location指令

    1)用在虚拟服务器server部分,提供来自客户端URI或者内部重定向访问。当一个请求匹配到了server部分,才会进行loaction的查找
    2)location指令,属于ngx_http_core_module模块。
    3)定义location可以使用prefix string location(前缀字符串),也可以使用regular expresstion location(正则表达式)。
    4)nginx首先检查prefix location,使用longest matching prefix最长前缀匹配规则,记住匹配的location,然后使用regular expression正则表达式匹配,根据他们在配置文件中的顺序,一旦匹配成功,则停止检索。
    5)语法location [ = | ~ | ~* | ^~ ] uri {...}
    location @name {...}
    6)modifier修饰符。
    = : 精确匹配,匹配成功,则停止搜索正则location; 不能有嵌套的location。可以加速request的处理。
    ~ : 区分大小写的正则表达式匹配
    ~ * :不区分大小写的正则表达式匹配
    ^ ~ :如果longest matching prefix location使用该修饰符,则不进行regular expression的检查。
    7)例子
    图片请求/images/1.gif ,会匹配location A;/other/1.gif将会匹配 location C; other/1.html将会匹配location B。

    location ^~ /image/ {
      //config A
    }
    location /other/ {
      //config B
    }
    location ~* \.(jpg | gif | png | jpef)${
     //config C
    }
    

    8)slash character (/)
    proxy_pass中的/,访问http://oldqi.top/hzq/user.html

    location /hzq/ {
      proxy_pass http://backend_server; #结尾不带 `/`,将匹配到http://backend_server/hzq/user.html
    }
    location /hzq/ {
      proxy_pass http://backend_server/; # 将匹配到http://backend_server/user.html
    }
    

    location中的/

    location /hzq { # 可以匹配uri `/hzq/index.html和/hzqqqq/index.html`
    }
    location /hzq/ { #只能匹配到`/hzq/xxx不能匹配/hzqqqq/xxx`
    }
    

    2,rewrite指令。

    使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
    在server块中,会先执行rewrite部分,然后才会匹配location块。

    1)rewrite regex replacement [flag];
    作用于server,location,if指令。
    2)如果regex匹配到URI,会使用replacement来替换URI;rewrite指令会根据在配置文件中出现的顺序依次执行,可以使用flag来终止接下来的处理。
    3)如果replacement以http://或者https://或者$scheme,则停止处理,执行重定向,返回到client。
    4)break 和last flag。
    last停止执行rewrite模块的指令,并根据rewirte规则重新发起请求。
    break停止执行rewrite模块的指令,继续执行块中剩余指令。

    image.png
    break.txt last.txt test.txt该目录下有三个txt文件。
    /mytest/test.txt 返回test
    /break/break.txt 返回404
    /last/last.txt 返回last
    redirect 302临时重定向。
    permanent 301永久重定向。

    3,alias和root用来指定请求资源的真实路径

    1)alias只能位于location块中。
    root指令,真实的路径是root指定的值加上location指定的值 。
    alias指令,真实路径都是 alias 指定的路径。
    2)

    location /mytest/ { 
      # 末尾必须带 / 
      alias  /var/hzq/;#请求http://oldqi.top/mytest/1.txt-->http://oldqi.top/var/hzq/1.txt
    }
    location /mytest/ {
      root /var/hzq;#请求http://oldqi.top/mytest/1.txt-->http://oldqi.top/var/hzq/mytest/1.txt
    }
    

    相关文章

      网友评论

        本文标题:Nginx location指令和rewrite指令,root和

        本文链接:https://www.haomeiwen.com/subject/gkayvxtx.html