栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

3天精通nginx第二天-location、proxy

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

3天精通nginx第二天-location、proxy

Nginx执行过程
      • location规则【重要程度:★★★✰✰】
      • 访问匹配示意图
      • root和alias区别【重要程度:★★★★✰】
        • root
        • alias
      • proxy_pass详解【重要程度:★★★★✰】
      • rewrite【重要程度:★★★✰✰】
        • rewrite语法格式及参数语法说明
        • Nginx配置rewrite
        • regex 常用正则表达式说明

location规则【重要程度:★★★✰✰】

语法规则: location [=||*|^~] /uri/ {… }

符号含义
== 开头表示精确匹配
^~^~开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)
~~ 开头表示区分大小写的正则匹配
~*~* 开头表示不区分大小写的正则匹配
!和!*!和!*分别为区分大小写不匹配及不区分大小写不匹配的正则
/用户所使用的代理(一般为浏览器)

  1. 精确匹配和一般匹配

    location = /jqybpp {
    	rewrite ^/ /jqpp.html break;
    	root /com/jit/location;
    }
    location /jqybpp {
    	rewrite ^/ /ybpp.html break;
    	root /com/jit/location;
    }
    

    访问地址:http://localhost/jqybpp 访问地址的【/jqybpp】精确匹配到第一个规则,返回jqpp.html

    访问地址:http://localhost/jqybpp.html 访问地址的【jqybpp.html 】匹配第二个规则,返回ybdpp.html

  2. 一般匹配

    location /ybpp {
    	rewrite ^/ /ybdpp.html break;
    	root /com/jit/location;
    }
    location /ybpp/c {
    	rewrite ^/ /ybcpp.html break;
    	root /com/jit/location;
    }
    

    访问地址:http://localhost/ybpp访问地址的【/ybpp】匹配第一个规则,返回ybdpp.html

    访问地址:http://localhost/ybpp/c 访问地址的【/ybpp/c】既与第一个规则匹配,又与第二个规则匹配,这时以最长uri匹配优先,返回ybcpp.html

  3. 一般匹配与^~开头的非正则匹配

    location /ybkt/ktpp/d { 
    	rewrite ^/ /ybdpp.html break;
    	root /com/jit/location;
    }
    location ^~ /ybkt/ktpp {
    	rewrite ^/ /ktpp.html break;
    	root /com/jit/location;
    }
    

    访问地址:http://localhost/ybkt/ktpp/d 访问地址的【/ybkt/ktpp/d】既与第一个规则匹配,又与第二个规则匹配,这时以一般匹配优先,返回ybdpp.html

    访问地址:http://localhost/ybkt/ktpp 访问地址的【/ybkt/ktpp】匹配第二个规则,返回ktpp.html

  4. ^~开头的非正则匹配与正则表达式匹配

    location ~ /ktzz/ktpp/zzpp {
    	rewrite ^/ /zzpp1.html break;
    	root /com/jit/location;
    }
    
    location ^~ /ktzz/ktpp {
    	rewrite ^/ /ktpp.html break;
    	root /com/jit/location;
    }
    

    访问地址:http://localhost/ktzz/ktpp/zzpp 访问地址的【/ktzz/ktpp/zzpp】既与第一个规则匹配,又与第二个规则匹配,这时以^~优先,返回ktpp.html

  5. 一般匹配与正则表达式匹配

    location /ybzz/ybpp {
    	rewrite ^/ /ybcpp.html break;
    	root /com/jit/location;
    }
    location ~ /ybzz/ybpp/zzpp {
    	rewrite ^/ /zzpp.html break;
    	root /com/jit/location;
    }
    

    访问地址:http://localhost/ybzz/ybpp/zzpp 访问地址的【/b/d/a】匹配第二个规则,返回zzpp.html

  6. 正则表达式与正则表达式

    location ~ zzzz/zzpp {
    	rewrite ^/ /zzpp.html break;
    	root /com/jit/location;
    }
    location ~ zzzz/zzpp/1 {
    	rewrite ^/ /zzpp1.html break;
    	root /com/jit/location;
    } 
    

    访问地址:http://localhost/zzzz/zzpp/1 访问地址的【/zzzz/zzpp/1】匹配第一个规则,返回zzpp1.html

location规则总结:

  • 带有【=】的精确匹配优先,立即返回。
  • 普通匹配,如果命中多个,则记录【最长的规则】,如果存在正则表达式匹配,【由上至下开始匹配】,一旦匹配成功【1】个,【立即返回】结果,并结束解析过程,否则返回【最长的匹配】。
  • 一般匹配与^~开头的非正则匹配,一般匹配优先,但还需要考虑那个匹配最长。
  • / 为默认匹配,即如果没有匹配上其他的location,则最后匹配默认匹配的部分。
访问匹配示意图

root和alias区别【重要程度:★★★★✰】 root

root:在目录里找path1+path2路径,最后定位到的地址为: root路径+path1+path2

location / {
            root   /com/jit/static/html; 
			index  jit.html; # 默认访问首页文件
        }

访问:http://www.test.com:81,使用这种配置则访问到/com/jit/static/html/jit.html

alias

alias:在目录里找path2路径,最后定位到的地址为:alias地址+path2

location /image {  
		alias   /com/jit/static/image; 
	}

访问:http://www.test.com:81/image/one.jpg,使用这种配置则访问到/com/jit/static/image/one.jpg

proxy_pass详解【重要程度:★★★★✰】

在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。

以下情况都访问http://www.test.com:81/proxy/proxy.html。

  1. proxy_pass以【/】结尾
location /proxy1/ {  
	proxy_pass http://192.168.110.102:8081/;
}

代理到的url为:http://192.168.110.102:8081/proxy.html

  1. proxy_pass不以【/】结尾
location /proxy2/ {
	proxy_pass http://192.168.110.102:8081;
}

代理到的url为:http://192.168.110.102:8081/proxy1/proxy.html

  1. proxy_pass存在path以【/】结尾
location /proxy3/ {
	proxy_pass http://192.168.110.102:8081/gateway/;
}

代理到的url为:http://192.168.110.102:8081/gateway/proxy.html

  1. proxy_pass存在path不以【/】结尾
location /proxy4/ {
	proxy_pass http://192.168.110.102:8081/gateway;
}

代理到的url为:http://www.test.com:81/gatewayproxy.html

rewrite【重要程度:★★★✰✰】 rewrite语法格式及参数语法说明

Nginx配置rewrite
server {
        listen 80;
        server_name localhost;
        rewrite ^/(.*) http://192.168.110.102:8081/$1 permanent;  #` `$1表示路径中正则表达式匹配的第一个参数
}
}
server {
        listen 80;
        server_name localhost;
        if ( $host != 'www.test.com:81'  ) {
                rewrite ^/(.*) http://192.168.110.102:8081/$1 permanent; #` `$1表示路径中正则表达式匹配的第一个参数
        }
}
regex 常用正则表达式说明
字符描述
**将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“n”匹配一个换行符,而“$”则匹配“$”
^匹配输入字符串的起始位置
$匹配输入字符串的结束位置
*****匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o”
?匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,“?“等效于”{0,1}”
.匹配除“n”之外的任何单个字符,若要匹配包括“n”在内的任意字符,请使用诸如“[.n]”之类的模式。
(pattern)匹配括号内pattern并可以在后面获取对应的匹配,常用$0…$9属性获取小括号中的匹配内容,要匹配圆括号字符需要(Content)

如果感觉这篇文章对您有帮助,可以给博主点赞、评论、收藏,这样是对博主最大的鼓励,谢谢。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826108.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号