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的请求都会匹配到。

匹配执行流程

  1. 查找普通字符串前缀的匹配规则
  2. 以修饰符 = 开头的普通字符串进行精确匹配,如果匹配到,则停止之后的规则查找
  3. 如果普通字符串以修饰符 ^~ 开头,并且是匹配到的最长普通字符串前缀,在匹配到这条规则后不再进行之后的正则查找了
  4. 存储匹配到的最长普通字符串前缀规则
  5. 查找正则表达式的匹配规则
  6. 在所有正则匹配规则中找到第一个匹配项后,就以此项为最终匹配结果
  7. 如果没有查找到正则表达式匹配,则以4中存储的普通匹配为最终匹配结果

普通字符串前缀匹配与配置文件中的前后定义顺序无关,匹配顺序从长到短,正则表达式匹配则受定义的前后顺序影响。

标签: nginx

添加新评论