Nginx HTTP控制模块篇 access环节的deny allow auth

摘要: 所属部位: > Linux > Nginx HTTP控制模块篇 access环节的deny allow auth_basic auth_request命令 (十三) 1一个环节中历经的控制模块 allow 命令 和 deny 命令 用以限定一些IP的浏览左右文:http,server,l...

所属部位: > Linux > Nginx HTTP控制模块篇 access环节的deny allow auth_basic auth_request命令 (十三)


1一个环节中历经的控制模块

 

allow 命令 和 deny 命令  

用以限定一些IP的浏览

左右文:http,server,location,limit_except

实例:

location / {
    deny 192.168.5.100;
    deny 192.168.5.0/24;    # 限定IP段
    deny all;   
    allow 192.168.5.3;      # 限定了192.168.5这一IP段,可是容许192.168.5.2
}

allow和deny是次序实行的,后面一种会遮盖前面一种。

 

 

auth_basic 控制模块


能用于简易的客户认证

auth_basic string|off;  # 默认设置off

auth_basic_user_file file;  # 特定客户名和登陆密码所属的文档

左右文:http,server,location,limit_except

这一客户登陆密码文档要应用 httpd-tools 指令转化成,假如安裝了Apache,这一控制模块默认设置存有。
yum install -y httpd-tools

htpasswd -bc 文档名 客户名 登陆密码        # 建立文档并载入客户登陆密码

htpasswd -b 文档名 客户名 登陆密码     # 在现有的文档中加上一个客户

一个文档能够有好几个客户名和登陆密码。


该客户认证根据cookie,要是键入一次便可以无需再输。

小试验:
htpasswd -bc //auth.pass zbp 123456
htpasswd -b //auth.pass yf 123456

server {
    listen 8080;
    server_name ;
    root /;
    # error_log //;
    location / {
        #auth_basic "Auth check";    # 认证的网页页面的title称为"Auth check",同时表明打开认证。
        #auth_basic_user_file //auth.pass;
    }
    # {
    #    auth_basic "Auth check";
    #    auth_basic_user_file //auth.pass;
    #} 
    location ~ ^/test/?$ {
        
        auth_basic "Auth check";
        auth_basic_user_file //auth.pass;
         break;
    } 
}

检测結果:
假如在 location / 加上auth认证,则全部网页页面必须键入账户登陆密码。
加上auth认证,要键入账户登陆密码。

假如涉及到到跳转:比如location ~ ^/test/?$ 要是是 /test或是/test/便可以进到该location,,并且认证登陆密码。
这时要将自动跳转放进auth_basic指令以后,并且应用break。不然不容易认证。缘故是,不应用break,便会再次配对到location /,而location /中沒有auth_basic命令,这时也不会开展认证。要了解 ess环节的auth_basic的。


auth_request 控制模块     应用上下游服务做认证

该控制模块默认设置未编译程序进Nginx:--with-http_auth_request_module

auth_request uri|off;   # uri便是认证网页页面的相对路径
auth_request_set $variable value;

基本原理:
比如我想浏览A服务。
A接到恳求后,转化成一个如出一辙的子恳求根据反方向代理商将恳求发送给上下游服务B,这一上下游服务B便是专业用于认证的。
若上下游服务B回到响应码为2xx,则回到再次恳求A服务的內容;假如上下游服务回到403或401,则将401/403回到给顾客端。

小试验:
浏览 p>

先编译程序auth_request控制模块

server {
    listen 8080;
    server_name ;
    root /;
    location / {
        auth_request /auth;
    }
    location /auth {
        proxy_pass auth;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";     # 恳求体为空
        proxy_set_header X-Original-URI $request_uri;   # 标明顾客端恳求的URI
    }
server {
    listen 8090;
    location /auth {
        return 200 "OK";
        #return 401 "Auth Fail";
    }
}

上边浏览 /:8080,认证不成功。

 

satisfy命令

satisfy all|any;    默认设置all

satisfy all;
表明 要是 access控制模块(如deny指令)、auth_basic控制模块、auth_request控制模块及其别的控制模块 统统 对恳求海关放行才可以确实海关放行。

any 要是有一个海关放行就对该恳求海关放行。

难题:假如一个location中应用了return命令和auth_basic命令,并且auth_basic在return以前,我想问一下是不是会开展认证?
答:不容易。由于return是rewrite控制模块的命令,ess环节,rewrite环节的命令会先实行,不管return和auth_basic命令在配备文档抽出现的次序怎样,全是return先实行。return实行便会终断后边全部编码的实行。

难题2:

location /{
    satisfy all;
    auth_basic "auth";
    auth_basic_user_file auth.pass;
    deny all;
}

我想问一下有机化学会键入客户登陆密码开展认证码?
答:沒有,由于应用了satify all,ess控制模块,ess控制模块就回绝了恳求,也不会再实行auth_basic。
假如改成 satify any,還是能够键入登陆密码的,并且登陆密码假如输正确了,便可以忽视deny all根据恳求。
 

张柏沛IT技术性blog > Nginx HTTP控制模块篇 access环节的deny allow auth_basic auth_request命令 (十三)

点一下拷贝转截该一篇文章



联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:网站建设文章