nginx location 正则匹配
nginx 统计语句
1.根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l
2.统计访问URL统计PV awk '{print $7}' access.log|wc -l
3.查询访问最频繁的URL awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more
4.查询访问最频繁的IP awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more
5.根据时间段统计查看日志 cat access.log| sed -n '/14\/Mar\/2015:21/,/14\/Mar\/2015:22/p'|more
awk '{print $1}' access.log | sort | uniq -c | sort -n -k 1 -r | head -n 10
1.Nginx location的匹配规则
~ 波浪线表示执行一个正则匹配,区分大小写
~* 表示执行一个正则匹配,不区分大小写
^~ ^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
= 进行普通字符精确匹配
@ #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
2.location 匹配优先级
= 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。
普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。
^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。
最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。
示例
location = / {
# 只匹配"/".
[ configuration A ]
}
location / {
# 匹配任何请求,因为所有请求都是以"/"开始
# 但是更长字符匹配或者正则表达式匹配会优先匹配
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg结尾的请求.
# 但是所有 /images/ 目录的请求将由 [Configuration C]处理.
[ configuration D ]
}
URL 重写
仅是URL重写,不需要用location匹配,直接在server里写rewrite即可。
3.【http_referer】
有时候有这样的需求,凡是从百度或者google点过来的请求,也就是说,当用后搜索到你的站点时,一旦他从搜索引擎的搜索页面进到我们的网站时,就可以做一个跳转。
if ($http_referer ~* "www.baidu.com") {
rewrite ^/(.*)$ http://www.lishiming.net redirect;
}
if ($http_referer ~* "www.google.com") {
rewrite ^/(.*)$ http://www.lishiming.net redirect;
}
这样配置以后,凡是从百度或者google点过来的请求都会跳转到 www.lishiming.net
4.
# 以referer防止而已刷下发验证码接口
location /sendValidCode {
#只允许login和register页面上的sendValidCode请求
if ($http_referer ~ "catest.12580.com/login") {
set $a "1";
}
if ($http_referer ~ "catest.12580.com/register") {
set $a "${a}1";
}
if ($http_referer ~ "catest.12580.com/reset-password") {
set $a "${a}1";
}
if ($http_referer ~ "catest.12580.com/h5/reset-password") {
set $a "${a}1";
}
if ($http_referer ~ "catest.12580.com/company") {
set $a "${a}1";
}
# add_header A $a;
if ($a != "1") {
return 599;
}
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.18.10.82:8417;
proxy_redirect default;
}