Nginx 的匹配规则通配符

Nginx的路径匹配符号:

=     表示精准匹配

^~   表示url以某个常规字符串开头,大多数情况下用来匹配url路径,nginx不对请求做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)

~     表示正则匹配,区分大小写

~*    表示正则匹配,不区分大小写

!~    表示区分大小写不匹配的正则

!~*   表示不区分大小写不匹配的正则

/       任何请求都会匹配

匹配优先级

首先匹配=, 其次匹配^~ , 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

例子:

location = / {  
   #规则A  
}  
location = /login {  
   #规则B  
}  
location ^~ /static/ {  
   #规则C  
}  
location ~ \.(gif|jpg|png|js|css)$ {  
   #规则D  
}  
location ~* \.png$ {  
   #规则E  
}  
location !~ \.xhtml$ {  
   #规则F  
}  
location !~* \.xhtml$ {  
   #规则G  
}  
location / {  
   #规则H  
}  

访问根目录/, 比如http://localhost/ 将匹配规则A

访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H

访问 http://localhost/static/a.html 将匹配规则C

访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D,规则E不起作用,而 http://localhost/static/c.png 则优先匹配到规则C

访问 http://localhost/a.PNG 则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。

访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。

访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。

简单通用配置

静态动态分离,除了静态资源以外的请求都交给Tomcat处理.

示例1:

location / {  
    proxy_pass http://localhost:8080
}  

location ^~ /static/ {  
    root /webroot/static/;  
}  

location ~* \.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {  
    root /webroot/res/;  
}  

示例2:

location ~* .(gif|jpg|jpeg)$ {
    rewrite .(gif|jpg|jpeg)$ /logo.png;
}
#不区分大小写匹配任何以gif,jpg,jpeg结尾的请求,并将请求重定向到/logo.png 

示例3:

location ~^.+\.txt$ {
    root /usr/local/nginx/html;
}

区分大小写匹配以.txt结尾的请求,并设置此location的路径为/usr/local/nginx/html/.也就是以.txt几位的请求将访问/usr/local/nginx/html/路径下的txt文件

二 alias与root的区别

root 实际访问路径会拼接url中的路径

alias 实际访问的路径不会拼接url中的路径

示例

location ^~ /meradmin/ {
  alias /usr/loca/nginx/sitewww/;
}

请求: http://meradmin.langwenke.com/meradmin/index.html

实际访问:/usr/local/nginx/sitewww/index.html

location ^~ /meradmin/ {
  root /usr/loca/nginx/sitewww/;
}

请求:http://meradmin.langwenke.com/meradmin/index.html

实际访问:/usr/local/nginx/sitewww/meradmin/index.html

nginx 中配置根据文件类型下载

      location ~* .*.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|csv) {
            add_header  Content-Type    "application/octet-stream";
            if ( $args ~ ^filename=(.*) ) {
                add_header  Content-Disposition "attachment; filename=$1";
            }
            root 项目路径;
        }
location ~* (\.txt)$ {
    location ~ robots\.txt$ {
    allow all;
    }
deny all;
}

三 last和break关键字的区别

1.last和break当出现在location之外时,两者的作用是一致的没有任何差异

2.last和break当出现在内部时:

last : 使用了last指令,rewrite后会跳出location作用域,重新开始再走一次刚才的行为

break: 使用了break指令,rewrite后不会跳出location作用域,它的生命也在这个location中终结

四 permanent和redirect 关键字的区别

rewrite ..... permanent 永久性重定向,请求日志中的状态吗为301

rewrite.......redirect 临时重定向,请求日志中的状态吗为302

五,综合示例

比如:我们需要将符合“/test/(\d+)/[\w-\.]+” 这个正则表达式的URL重定向到一个固定的页面。符合这个正则表达式的页面可能是:http://test.com/test/12345/abc122.html、http://test.com/test/456/11111cccc.js等

从上面的介绍可以看出,这里可以使用rewrite重定向或者alias关键字来达到我们的目的。因此,这里可以这样做:

(1)使用rewrite关键字:

location ~ ^.+\.txt$ {
    root /usr/local/nginx/html/;
}


location ~* ^/test/(\d+)/[\w-\.]+$ {
    rewrite ^/test/(\d+)/[\w-\.]+$ /testpage.txt last;
}

这里将所有符合条件的URL(PS:不区分大小写)都重定向到/testpage.txt请求,也就是 /usr/local/nginx/html/testpage.txt 文件

2.使用alias关键字

location ~* ^/test/(\d+)/[\w-\.]+$ {
    alias /usr/local/nginx/html/static/sta1.html;
}

这里将所有符合条件的URL(PS:不区分大小写)都重定向到/usr/local/nginx/html/static/sta1.html 文件

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值