zoukankan      html  css  js  c++  java
  • nginx访问控制

    一、基于IP的访问控制

    1、http_access_module

    a、配置语法

    Syntax:    allow address | CIDR | unix: | all;
    Default:    —
    Context:    http, server, location, limit_except
    
    Syntax:    deny address | CIDR | unix: | all;
    Default:    —
    Context:    http, server, location, limit_except

    CIDR按照网点的方式进行配置(如:192.168.0.0/24)。

    unix: :linux/unix上用到Socket时的访问。

    all 允许所有的ip访问。

    b、示例:

    mv /etc/nginx/conf.d/deault.conf /etc/nginx/conf.d/access_mod.conf
    vim access_mod.conf

    ~模式匹配,这里是在访问路径里做模式匹配,访问的是根目录下以admin.html开头的路由

     这里阻止的是我本机电脑的ip地址方位该站点。允许其它所有的ip访问。

    页面访问效果:

    c、示例二:

    192.168.0.0/24 :允许一个IP段来访问该站点。

    此时就可以正常访问该站点了,非本IP段的访问不了。

     

     2、http_access_module的局限性。

    当客户端与服务端直接有代理服务器时,http_access_module限制的就是代理服务器的ip,而非真正客户端的ip。

    解决方案:

    方案一、使用 http_x_forwarded_for来解决。

    HTTP报头中 X-Forwarded-For 和 Rmote-Addr 之间的区别如下图:

    X-Forwarded-For 是由一连串的IP构成的,它包含整个请求过程中包含客户端的IP和所有中间经过的代理服务器的IP,以逗号分隔。格式如下:

    http_x_forwarded_for=Client Ip , Proxy(1)IP , Proxy(2) IP , ....

     当然 x_forwarded_for 也存在一个问题,因为它只是一个头信息,是可以被修改的,如果被别人修改了,那么访问控制也就不生效了。

    方案二、结合geo模块

    方案三、通过HTTP自定义变量传递。

    将客户端 Remote-Addr的信息写入自定义变量,然后一级一级的携带到后端服务器,这样既能避免信息被改写,也能准确读到客户端的IP地址。

    二、基于用户的信任登录

    1、http_auth_basic_module

    作用用来做用户登录认证。

    语法:

    Syntax:    auth_basic string | off;
    Default:   auth_basic off;
    Context:   http, server, location, limit_except
    
    Syntax:    auth_basic_user_file file;
    Default:    —
    Context:    http, server, location, limit_except

    这里的 file 是一个用户名和密码的对应文件,格式如下:

    name1:password1
    name2:password2:comment
    name3:password3

    密码采用 htpasswd 进行加密,详情请参考 http_auth_basic_module的官网文档(http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html)。

    查看是否有安装 htpasswd

    rpm -qf /usr/bin/htpasswd

    所有我们只需要用yum 安装一下 httpd-tools 就可以啦。

    配置密码文件

    //创建密码文件,并加入一个用户
    htpasswd -c /etc/nginx/auth_conf chrdai

     

    查看文件内容

    发现我们需要的用户名:密码格式的文件已经生成好了。

    配置用户认证的配置文件。

    mv /etc/nginx/conf.d/access_mod.conf /etc/nginx/conf.d/auth_mod.conf
    vim /etc/nginx/conf.d/auth_mod.conf

     再次访问该站点就需要输入用户名和密码了。

    2、http_auth_basic_module的局限性

    • 用户认证依赖文件方式。
    • 需要把单独的一套用户名密码存入一个文件,操作管理机械,效率低下。

    解决方案:

    • Nginx结合LUA实现高效验证。
    • Nginx配合企业的LDAP,将Nginx和LDAP打通,利用nginx-auth-ldap模块来实现。rpm包默认安装不包含该模块。

    本文为袋鼠学习中的总结,如有转载请注明出处:https://www.cnblogs.com/chrdai/protected/p/11333360.html

  • 相关阅读:
    Wireshark抓取iPhone的数据包
    AVSpeechSynthesizer
    NSData,Byte,NSString 转换
    app 国际化
    带颜色日志
    swift生成二维码
    CocosPods安装和导入第三方框架
    多线程总结
    计算机系统导论——读书笔记——第六章 存储器层次结构
    数据结构与算法——编程作业——内排序&外排序
  • 原文地址:https://www.cnblogs.com/chrdai/p/11333360.html
Copyright © 2011-2022 走看看