nginx的ngx_http_access_module中allow和deny语句并存于一个location时,从各台机器上进行访问,匹配原则是:
allow语句和deny指令只要有一条匹配了,则不再执行其他的allow和deny指令。 如果没有匹配才继续往下执行其他的allow或者deny指令继续进行匹配。
举例分析:
例1:
location /test5
{
allow 127.0.0.1;
deny 127.0.0.1;
echo "Hello World!";
}
当从本机访问时,本机ip是127.0.0.1,与第一条allow指令的ip匹配,则不再执行下一句的deny指令。allow表示允许进行访问,再执行echo指令,输出“Hello World!”
当从其他机器访问时,其他机器ip不是127.0.0.1,因此与allow指令的ip不匹配,继续往下看deny指令的ip,依然不匹配,再执行echo语句,输出“Hello World!”
例2:
location /test6
{
deny 127.0.0.1;
allow 127.0.0.1;
echo "Hello World!";
}
当从本机访问时,本机ip是127.0.0.1,与第一条deny指令的ip匹配,则不再执行下一条allow指令。deny表示不允许进行访问,当从本机进行访问时直接报403错误,不再进行后续任何语句。
当从其他机器访问时,其他机器ip不是127.0.0.1,因此与deny指令的ip不匹配,继续往下看allow指令的ip,依然不匹配,再执行echo指令,输出“Hello World!”
例3:
location /test8
{
allow all;
deny 127.0.0.1;
echo "Hello World!";
}
当从本机访问时,本机ip是127.0.0.1,与第一条allow指令的all匹配,则不再执行下一条deny指令。allow表示允许进行访问,再执行echo指令,输出“Hello World!”
当从其他机器访问时,其他机器ip也属于all,因此也与第一条allow匹配,则不再执行下一条deny指令。allow表示允许进行访问,再执行echo指令,输出“Hello World!”
例4:
location /test9
{
deny all;
allow 127.0.0.1;
echo "Hello World!";
}
当从本机访问时,本机ip是127.0.0.1,与第一条deny指令的all匹配,则不再执行下一条allow指令。deny表示不允许进行访问,不再执行后续任何指令,直接报403错误
当从其他机器访问时,其他机器也属于all,因此也与第一条deny指令的all匹配,则不再执行下一条allow指令。deny表示不允许进行访问,不再执行后续任何指令,直接报403错误