Nginx 手记(四)访问控制

Nginx的访问控制

  • 基于IP的访问控制:http_access_module
  • 基于用户的信任登陆:http_auth_basic_module

一、http_access_module 访问模块

#允许:允许指定的ip 或ip网段 或unix上的socket访问 或所有
语法:allow address|CIDR|unix:|all
默认值:无
上下文:http,server,location,limit_except

#禁止:禁止指定...
语法:deny address|CIDR|unix:|all
默认值:无
上下文:http,server,location,limit_except
用例:
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /opt/site/sam;
        index  index.html index.htm;
    }

    #~模式匹配 以/admin.html开头的访问
#    location ~ ^/admin.html {
#        root /opt/site/sam;
#        deny 113.111.48.118;    #禁止该ip访问
#        allow all;              #允许其他所有访问
#        index index.html index.htm; 
#    }
    
    #~模式匹配 以/admin.html开头的访问
    location ~ ^/admin.html {
        root /opt/site/sam;
        allow 113.111.48.0/24;    #允许该ip段访问 113.111.48.0 到 113.111.48.24
        deny all;                #禁止其他所有访问
        index index.html index.htm; 
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    
}
检测下配置语法:
[root@sam ~]# nginx -tc /etc/nginx/nginx.conf
重新加载配置
[root@sam ~]# nginx -s reload -c /etc/nginx/nginx.conf
局限性:

remote_addr:获取上一级的ip地址,可能是客户端的ip地址,也可能是上一级代理的ip地址

http_x_forwarded_for:所有ip地址,包括:客户端ip地址以及所有的代理ip地址

http_access_module模块则是使用了remote_addr实现访问控制,如果客户端使用了代理进行访问,那么不能准确的获取到客户端ip,而不能准确对其进行控制。

二、http_auth_basic_module 用户登陆认证模块

#用户认证配置
#string:登陆提示
语法:auth_basic string|off;
默认值:auth_basic off; #默认关闭
上下文:http,server,location,limit_except

#配置 存储用户授权信息(账号密码)的文件路径
语法:auth_basic_user_file file;
默认值:无
上下文:http,server,location,limit_except
1、新建密码文件(使用htpasswd)
使用htpasswd生成密码文件
#新建一个密码文件(指定文件名为/etc/nginx/auth_conf),用户名为sam,并设置密码。
[root@sam ~]# htpasswd -c /etc/nginx/auth_conf sam
New password: 
Re-type new password: 
Adding password for user sam
如果没有htpasswd工具,安装httpd-tools 即可:
[root@sam ~]# yum install httpd-tools -y
2、server中配置
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /opt/site/playSports;
        index  index.html index.htm;
    }

    #匹配以/admin.html开头的访问
    location ~ ^/admin.html {
        root    /opt/site/sam;
        auth_basic "Auth access test!input your password!"; #登陆提示语
        auth_basic_user_file /etc/nginx/auth_conf;          #密码文件路径
        index   index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
浏览器访问:http://你的ip/admin.html ,进入登陆验证。
注意:需要在项目目录下新建 admin.html 文件,进行测试。

转载于:https://my.oschina.net/magicalSam/blog/1526138

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值