Nginx中loaction基本用法:location [=|~|~*|^~] /uri/ { … }
语法形式
location [ = | ~ | ~* | ^~ | @] /uri/ { configuration }
语法规则: location [=|~|~*|^~] /uri/ { … }
location = /uri =开头表示精确前缀匹配,只有完全匹配才能生效。
location ^~ /uri ^~开头表示普通字符串匹配上以后不再进行正则匹配。
location ~ pattern ~开头表示区分大小写的正则匹配。
location ~* pattern ~*开头表示不区分大小写的正则匹配。
location /uri 不带任何修饰符,表示前缀匹配。
location / 通用匹配,任何未匹配到其他location的请求都会匹配到。
注意:正则匹配会根据匹配顺序,找到第一个匹配的正则表达式后将停止搜索。普通字符串匹配则无视顺序,只会选择最精确的匹配。
常用配置指令alias、root、proxy_pass
Location区段匹配示例
location = / {
# 只匹配 / 的查询.
[ configuration A ]
}
location / {
# 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处
理。
[ configuration D ]
} 各
请求的处理如下例:
■/ → configuration A
■/documents/document.html → configuration B
■/images/1.gif → configuration C
■/documents/1.jpg → configuration D
禁止访问目录并返回指定的HTTP状态码,命令如下:
server
{
listen 80;
server_name www.xx.com ;
root /data;
index index.html index.htm;
access_log logs/www_access.log commonlog;
location /admin/
{
return 404;
}
location /tmplates/
{
return 403;
}
}
配置禁止访问指定的单个或多个目录
#禁止访问单个目录的命令如下:
location ~ ^/static
{
deny all;
}
#禁止访问多个目录的命令如下:
location ~ ^/(static|js)
{
deny all;
}
配置Nginx,禁止解析指定目录下的指定程序:
location ~ ^/images/.*\.(php|php5|sh|pl|py)$
{
deny all;
}
location ~ ^/static/.*\.(php|php5|sh|pl|py)$
{
deny all;
}
location ~* ^/data/(attachment|avatar)/.*\.(php|php5)$
{
deny all;
}