最新消息:重新回归WordPress,我要比较认真的开始更新我的博客了。

Nginx配置中的路径匹配规则及IF判断

服务器相关 hanlei 11379浏览

通常情况下网站的模板文件是不需要被用户访问的,也可以说是不能被用户访问的。所以我们要配置的规则就是特定目录的特定后缀文件不允许访问。

Nginx路径匹配符号

  • = 表示精确匹配
  • ^~ 表示uri以某个常规字符串开头,大多情况下用来匹配url路径,nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
  • ~ 正则匹配(区分大小写)
  • ~* 正则匹配(不区分大小写)
  • !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
  • / 任何请求都会匹配

符号的优先级

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

简单通用配置

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

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/;  
}  

禁止访问模板文件

location ~ /themes/.*\.(html|htm|php)$
{
    deny all;
}

IF判断语句

1、正则表达式匹配:

= = : 等值比较;

~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写;

~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字符大小写;

!~:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分字符大小写;

!~*:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分字符大小写;

2、文件及目录匹配判断:

-f, !-f:判断指定的路径是否为存在且为文件;

-d, !-d:判断指定的路径是否为存在且为目录;

-e, !-e:判断指定的路径是否存在,文件或目录均可;

-x, !-x:判断指定路径的文件是否存在且可执行;

#几个示例
#set $flag 0;
##if ($flag = 0) {
#    return 501;
#}

#客户端请求的完整请求路径
#if ( $request_uri ~* /(.*)\.php ) {                                        
#    return 502;
#}

if (!-f $request_filename) {
        return 414;
}

#禁止chrome访问
#if ($http_user_agent ~ Chrome) {
#        return 503;
#}

location /loct {
    return 401;
}
location / {
    #if
    root html;
    index index.html;
}

转载请注明:HANLEI'BLOG » Nginx配置中的路径匹配规则及IF判断