2014-04-10 14:53:02
来 源
IT技术网
Nginx
本篇分享了Nginx配置字段:location详解,希望对于初学Nginx服务器相关的朋友有帮助,更多Nginx安装、配置、报错处理等资源请本站内搜索。。
nginx location可以根据字符串或者正则表达式来进行匹配

如果要使用正则表达式,则必须以“~”或者"~*"开头

"~"表示区分大小写

"~*"表示不区分大小写

匹配过程如下:

第一步:进行字符串匹配,找到最合适的那一个

第二步:进行正则表达式匹配,找到匹配上的第一个

第三步:如果第二步匹配上了,则用第二步匹配的结果,否则用第一步匹配的结果

从上面可以看出来,正则表达式的优先级要高一些

上面的匹配过程的例外:

    1.可以用"="加在字符串前面,表示完全匹配,如果过来的url与某个字符串完全匹配(前面有"="),则搜索停止。因此经常访问"/",则用"=/"可以加快一点点处理速度(因为它停止了nginx配置中的其他搜索)

    2.如果只想用字符串匹配,则在字符串前加“^~”,则一旦字符串匹配上了,就不会再进行正则表达式匹配

综上,location的匹配规则如下:

      1.先进行"="的完全匹配,如果匹配上,则搜索停止

      2.进行字符串匹配,如果匹配上了,但是没有"^~",则进行第3步;如果匹配上了,而且有"^~",则搜索停止;

      3.正则表达式匹配,如果匹配上了,则搜索停止;如果没有匹配上,则进行第4步;

      4.此时第3步没有匹配上,则拿第2步匹配的结果来进行,如果第2步也没有匹配上,则跳到错误页面(404)

location  = / {

  # 只匹配"/"

  [ configuration A ] 

}

location  / {

  # 匹配一切以"/"为开头的查询,但是正则表达式(优先级更高),和

  # 更长的字符串匹配(更切合查询)将优先匹配

  [ configuration B ] 

}

location ^~ /images/ {

  # 匹配以"/images/"开头的查询,因为有"^~",将不会搜索正则表达式

  [ configuration C ] 

}

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

  # 匹配一切以".gif  .jpg .jpeg"为结尾的查询,然后如果查询以"/images/"开头,

  # 以“.gif   .jpg   .jpeg”结尾,还是会匹配 configuration C

  [ configuration D ] 

举例查询

/ -> configuration A

/documents/document.html -> configuration B

/images/1.gif -> configuration C

/documents/1.jpg -> configuration D

--------------------------------------------------------------------------------------------------------------------------------

实际测试,下面为一个完整的nginx域名配置,使用return来进行区分匹配上哪个location

server{

     listen       80;

     server_name  want.abc.com;

     charset gbk;

     access_log  logs/want_access.log  main;

     error_log  logs/want_error.log;

    location  = / { return 100;}

    location  / { return 101;}

    location ~ /images/ { return 102;}

    location ^~ /images/ { return 103;}

    location ~* .(gif|jpg|jpeg)$ {return 105;   }

    location /a {return 106;}

    location ~ /a { return 107; }

}

解释:先进行"="的完全匹配,如果匹配上,则搜索停止

~# wget want.abc.com/            

--2012-01-05 16:09:23--  http://want.abc.com/

正在解析主机 want.abc.com... 127.0.0.1

正在连接 want.abc.com|127.0.0.1|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 100 

2012-01-05 16:09:23 错误 100:(没有描述)。

解释:正则表达式没有匹配上,就是用字符串匹配

# wget want.abc.com/document/document.html

--2012-01-05 16:12:03--  http://want.abc.com/document/document.html

正在解析主机 want.abc.com... 127.0.0.1

正在连接 want.abc.com|127.0.0.1|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 101 

2012-01-05 16:12:03 错误 101:(没有描述)。

解释:进行字符串匹配,匹配上了,同时有"^~",则停止搜索

#wget want.abc.com/images/a

--2012-01-05 16:12:25--  http://want.abc.com/images/a

正在解析主机 want.abc.com... 127.0.0.1

正在连接 want.abc.com|127.0.0.1|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 103 

2012-01-05 16:12:25 错误 103:(没有描述)。

解释:正则表达式匹配上了,停止搜索

# wget want.abc.com/abc/1.gif

--2012-01-05 16:14:23--  http://want.abc.com/abc/1.gif

正在解析主机 want.abc.com... 127.0.0.1

正在连接 want.abc.com|127.0.0.1|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 105 

2012-01-05 16:14:23 错误 105:(没有描述)。

解释:字符串匹配上了,正则表达式匹配上了,但是优先使用正则表达式匹配

# wget want.abc.com/a

--2012-01-05 16:18:15--  http://want.abc.com/a

正在解析主机 want.abc.com... 127.0.0.1

正在连接 want.abc.com|127.0.0.1|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 107 

2012-01-05 16:18:15 错误 107:(没有描述)。

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。