内容简介:Nginx 将配置按照层级关系,用块状形式进行配置,每当一个请求来临时,nginx 服务器就会处理这个请求到底会映射到哪个块配置.在 Nginx 的配置文件中,两种主要的块配置是:如下就是常用的 location 配置的语法格式,其中
Nginx location
是使用 nginx 的过程中必须要掌握的技能,无论是在 server blocks
还是其他 location blocks
中都会用到,这篇文章简单介绍了当请求来临时 location
指令是如何处理客户端 URI
请求的.
Nginx 的块(Block)配置
Nginx 将配置按照层级关系,用块状形式进行配置,每当一个请求来临时,nginx 服务器就会处理这个请求到底会映射到哪个块配置.在 Nginx 的配置文件中,两种主要的块配置是:
-
server
块配置 -
location
块配置server
的块配置包含一系列的虚拟 server 配置,多个 server 配置就可以对多个 domain name 的请求,也包括 ip 端口进行处理. 而location
配置在server
块配置中起着至关重要的作用,决定了URI
或者资源请求应该如何被处理,这些 URI 请求可以被拆分为多个location
的配置
Nginx Location 指令语法
如下就是常用的 location 配置的语法格式,其中 modifier
是可选的, location_match
就是制定 URI 应该去往哪个配置的关键.
location optional_modifier location_match { . . . } 复制代码
Regular expressions(RE)
或者字面量都可以用来定义 modifier
,如果 location 配置中制定了modifier,可能会改变 nginx匹配 location的方式,如下介绍几种最重要的modifier:
- (none) 完全没有modifier表示 location会解释为前缀匹配,要确定匹配项,将根据从URI的开头匹配该location.
-
=
等号表示当前这个 location 会匹配一个确定的请求,配置什么就匹配什么请求,如果匹配上了,就会停止搜索. -
~
波浪号表示当前这个 location 会当成一个大小写敏感的RE匹配. -
~*
波浪号跟星号标识 location 会按照大小写不敏感的 RE 匹配. -
^~
非表达式(RE)匹配,正则表达式将不会生效.
Ngnix Location的匹配顺序
对于每个请求来说,nginx 会选择最匹配的一个 location 来处理这个请求,nginx 其实就是通过对比这些 location 规则来选择一个 location,对比的顺序可以总结为:
- 首先匹配前缀匹配(没有 RE 表达式),针对当前这个请求,每个前缀匹配都匹配一遍.
-
搜索
=
匹配,如果当前请求匹配上了,搜索将会停止,直接使用这个这个 location. -
如果第二步没有匹配上,nginx 会按照如下步骤继续搜索最长前缀匹配:
3.1 如果最长前缀匹配有
^~
这个modifier,nginx 会停止搜索并直接使用这个 location. 3.2 如果 没有 使用^~
,暂存这个 location并且继续搜索. -
只要最长前缀匹配被暂存和选中,nginx 就会看当前的 location 是否有大小写敏感的 RE(
~
和~*
),第一个匹配上这种会被当做有效的 location来处理这个请求. - 如果没有 RE 的 location 匹配上,前面暂存的 location 就会被选中来处理这个请求.
注:所以 没有修饰符的 location 其实是很浪费资源的,可以用 ^~ 来替代.
举例
如下是一些 location 配置的例子,用来详细描述上面所说的处理顺序,你也可以按照具体实际情况来修改这些例子.
location = / { # 只处理请求 /. } 复制代码
location /data/ { # 所有以 /data/ 匹配,但是还会继续搜索. # 如果没有其他 location 匹配上,就用这个处理请求. } 复制代码
location ^~ /img/ { # 所有以 /img/ 开头的请求并且会停止搜索. } 复制代码
location ~* .(png|gif|ico|jpg|jpeg)$ { # 以png, gif, ico, jpg ,jpeg结尾的请求. # 如果请求是到 /img/ 路径的话 还是会被上面:point_up_2:的 location 处理 } 复制代码
如何防止图片盗链:
location ~ .(png|gif|jpe?g)$ { valid_referers none blocked yourwebsite.io *.yourwebsite.io; if ($invalid_referer) { return 403; } } 复制代码
在可写权限的目录禁止脚本:
location ~* /(media|images|cache|tmp|logs)/.*.(php|jsp|pl|py|asp|cgi|sh)$ { return 403; } 复制代码
更多 nginx location 指令的信息,可以参见官网:Nginx
以上所述就是小编给大家介绍的《Nginx Location 指令语法解析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Linux内核完全注释
赵炯 / 机械工业出版社 / 2005-8 / 42.00元
Linux内核完全注释,ISBN:9787111149682,作者:赵炯编著一起来看看 《Linux内核完全注释》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
Base64 编码/解码
Base64 编码/解码