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