nginx location配置(转)

今天讲下location的用法,部分内容是直接从网络上摘取的,这边做了一个整理,为了便于理解和学习,我这边做了一些例子。

语法规则: location [=|~|~*|^~] /uri/ { … } = 表示精确匹配,这个优先级也是最高的 ^~ 表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。 ~  表示区分大小写的正则匹配 ~* 表示不区分大小写的正则匹配(和上面的唯一区别就是大小写) !~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则 / 通用匹配,任何请求都会匹配到,默认匹配.

下面讲讲这些语法的一些规则和优先级 多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

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

例子,有如下匹配规则:

location / {
   echo "/"; //需要安装echo模块才行,这边大家可以改成各自的规则
}
location = / {
   echo "=/";
}
location = /nginx {
   echo "=/nginx";
}
location ~ \.(gif|jpg|png|js|css)$ {
   echo "small-gif/jpg/png";
}
location ~* \.png$ {
   echo "all-png";
}
location ^~ /static/ {
   echo "static";
}

以下是各种的访问情况

访问http://a.ttlsa.com/.因为/是完全匹配的 如下:

# curl http://a.ttlsa.com/
 =/

访问http://a.ttlsa.com/nginx,因为完全匹配了"=/nginx"

# curl http://a.ttlsa.com/nginx
=/nginx

访问http://a.ttlsa.com/nginx,从第一个开始尝试匹配,最后匹配到了~* \.png$ .

# curl http://a.ttlsa.com/xxx/1111.PNG (注意,这是大写)
all-png

访问http://a.ttlsa.com/static/1111.png,虽然static放在最后面,但是因为有^的缘故,他是最匹配的.

# curl http://a.ttlsa.com/static/1111.png
static

好了,最后给出我们先上环境的静态文件的匹配规则

location ~* .*\.(js|css)?$
{
        expires 7d; //7天过期,后续讲解
        access_log off; //不保存日志
}
 
location ~* .*\.(png|jpg|gif|jpeg|bmp|ico)?$
{        
        expires 7d;
        access_log off;
}
 
location ~* .*\.(zip|rar|exe|msi|iso|gho|mp3|rmvb|mp4|wma|wmv|rm)?$
{
        deny all; //禁止这些文件下载,大家可以根据自己的环境来配置
}

原文发布于微信公众号 - nginx(nginx-study)

原文发表时间:2015-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏NetCore

密码最短长度为7,其中必须包含以下非字母数字字符1 完美解决方案

大家用2005网站配置中遇到"密码最短长度为7,其中必须包含以下非字母数字字符1" 问题没有? 在这里给出解决方法: 方法一:7位密码中请用输入~!@#$^...

2176
来自专栏Felix的技术分享

理解对C++裸指针释放后重用的问题

2369
来自专栏企鹅号快讯

PHP高级特性之反射

反射-Reflection 面向对象编程中对象被赋予了自省的能力,而这个自省的过程就是反射。 反射,直观理解就是根据到达地找到出发地和来源。比如,一个光秃秃的对...

2729
来自专栏技术专栏

慕课网Flask高级编程实战-4.flask核心机制

在 3.8节我们通过db.create_all(app=app)的方式解决了working outside application context的错误,下面我...

3443
来自专栏码农笔录

Failed to resolve directive: el vue2报错

1392
来自专栏Java帮帮-微信公众号-技术文章全总结

Java多线程详解2

Java多线程详解 Java线程:线程的同步与锁 一、同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。 例如:两个线程Threa...

3667
来自专栏java一日一条

如何防止单例模式被JAVA反射攻击

单例模式相信大家都知道,用过的人不在少数。之前写过一篇博文《singleton模式四种线程安全的实现》(参见:http://blog.csdn.NET/u013...

1501
来自专栏个人分享

Redis常用命令

使用sadd创建集合 使用smembers 查询集合,使用srem删除集合中的元素 使用sismember查询集合中是否包含有此元素,有的话则返回1 没有返回0

3192
来自专栏IT派

爬虫工程师面试题总结,带你入门Python爬虫

4393
来自专栏架构之路

深入探讨 Java 类加载器

看到一篇写得非常好的加载器文章,转过来与大家分享一下(https://www.ibm.com/developerworks/cn/java/j-lo-class...

3674

扫码关注云+社区

领取腾讯云代金券