Linux10.11 Nginx中location配置

  

  安装第三方模块echo-nginx-module

//安装该模块,可以支持在nginx配置文件中支持echo命令
git clone https://github.com/openresty/echo-nginx-module.git

//到Nginx安装目录中,make clean
[root@localhost src]# wget https://github.com/openresty/echo-nginx-module/archive/v0.6.tar.gz
[root@localhost src]# tar xzf v0.6.tar.gz
[root@localhost src]# ls
echo-nginx-module-0.6  nginx-1.14.0  nginx-1.14.0.tar.gz  v0.6.tar.gz
[root@localhost ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
configure arguments: --prefix=/usr/local/nginx

[root@localhost nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/echo-nginx-module
[root@localhost nginx-1.14.0]# make && make install

//echo 要在location语句中使用
location /abc/{
      echo 123  
}
nginx location语法规则:location [=|~|~*|^~] /uri/ { … }
nginx的location匹配的变量是$uri
符号说明
=表示精确匹配
^~表示uri以指定字符或字符串开头
~表示区分大小写的正则匹配
~*表示不区分大小写的正则匹配
/通用匹配,任何请求都会匹配到

规则优先级

=  高于  ^~  高于  ~* 等于 ~  高于  /

规则示例

location = "/12.jpg" { ... }
如:
www.123.com/12.jpg 匹配
www.123.com/abc/12.jpg 不匹配

location ^~ "/abc/" { ... }
如:
www.123.com/abc/123.html 匹配
www.123.com/a/abc/123.jpg 不匹配

location ~ "png" { ... }
如:
www.123.com/aaa/bbb/ccc/123.png 匹配
www.123.com/aaa/png/123.html 匹配

location ~* "png" { ... }
如:
www.123.com/aaa/bbb/ccc/123.PNG 匹配
www.123.com/aaa/png/123.html 匹配


location /admin/ { ... }
如:
www.123.com/admin/aaa/1.php 匹配
www.123.com/123/admin/1.php 不匹配

  

有些资料上介绍location支持不匹配 !~,
如: location !~ 'png'{ ... }
这是错误的,location不支持 !~

如果有这样的需求,可以通过if来实现,
如: if ($uri !~ 'png') { ... }

注意:location优先级小于if