nginx禁止访问文件或目录的配置方法及location指令的uri匹配规则
nginx禁止访问文件或目录的配置方法
nginx禁止访问指定后缀的文件
location ~ .*\.(ini|inc|conf|dat|txt)$ {
# 正则表达式匹配,禁止访问后缀为ini,inc,conf,dat,txt的文件
# 修饰符 ~ 表示正则匹配区分大小写,可以使用修饰符 ~* 表示不区分大小写
deny all;
}
nginx禁止访问指定目录
location ^~ /path1/ {
# 普通字符串前缀匹配,修饰符 ^~ 表示如果匹配到这条普通规则后,不再进行之后的正则搜索了
deny all;
}
location ^~ /path2/ {
deny all;
}
也可以使用正则匹配同时禁止访问多个指定目录
location ~ ^/(App|config|Include|Theme|vendor)/ {
deny all;
}
nginx禁止访问指定目录中的特定后缀的文件
location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ {
# 禁止访问这些指定目录中的php文件
deny all;
}
nginx location指令的uri匹配规则
nginx可以通过配置location指令来对用户请求的uri进行调度,执行不同的文件。
location指令有两种匹配模式,普通字符串前缀匹配和正则表达式匹配。
普通字符串前缀匹配必须以相应的uri开头,如下的匹配规则,必须以/some/path
开头的uri才会被匹配,比如/some/path/document.html
,而/my-site/some/path
不会被匹配。
location /some/path/ {
...
}
匹配的顺序是先匹配普通字符串前缀,再匹配正则表达式,不过正则匹配优先级高于普通匹配除非使用修饰符 ^~
。
语法规则
location [ = | ~ | ~* | ^~ ] uri { ... }
location = /uri = 开头表示精确匹配,只有完全匹配上才能生效,匹配成功则停止其他匹配。
location ^~ /uri ^~ 开头对uri路径进行普通字符串前缀匹配,匹配成功则不再进行正则匹配。
location ~ pattern ~ 开头表示区分大小写的正则匹配。
location ~* pattern ~* 开头表示不区分大小写的正则匹配。
location /uri 不带任何修饰符的普通字符串前缀匹配,优先级低于正则匹配。
location / 通用匹配,任何未匹配到其它location的请求都会匹配到。
匹配执行流程
- 查找普通字符串前缀的匹配规则
- 以修饰符
=
开头的普通字符串进行精确匹配,如果匹配到,则停止之后的规则查找 - 如果普通字符串以修饰符
^~
开头,并且是匹配到的最长普通字符串前缀,在匹配到这条规则后不再进行之后的正则查找了 - 存储匹配到的最长普通字符串前缀规则
- 查找正则表达式的匹配规则
- 在所有正则匹配规则中找到第一个匹配项后,就以此项为最终匹配结果
- 如果没有查找到正则表达式匹配,则以
4
中存储的普通匹配为最终匹配结果
普通字符串前缀匹配与配置文件中的前后定义顺序无关,匹配顺序从长到短,正则表达式匹配则受定义的前后顺序影响。