nginx的访问控制

一、基于Basic Auth认证与基于IP的访问控制

  一、基于Basic Auth认证

  Nginx提供HTTP的Basic Auth功能,配置了Basic Auth之后,需要输入正确的用户名和密码之后才能正确的访问网站。

  1、安装httpd-tools,用htpasswd来生成密码信息

  首先要安装httpd-tools,在httpd-tools中包含了htpasswd命令。

yum install -y httpd-tools

  2、创建一个用户,然后基于这个用户通过htpasswd命令生成用户名及对应密码数据库文件

#创建用户
useradd webuser

#创建密码管理目录
mkdir -p /etc/nginx/auth/

#创建密码
# htpasswd -c /etc/nginx/auth/passwd.db webuser //创建认证信息,webuser 为认证用户名 
New password: *******  //输入认证密码 web@user
Re-type new password: ********  //再次输入认证密码 web@user
Adding password for user webuser

#修改网站认证数据库权限
chmod 755 /etc/nginx/auth/passwd.db  

#修改网站认证数据库属主和属组 
chown root:root /etc/nginx/auth/passwd.db

#查看通过htpasswd生成的密码为加密格式 
#cat /etc/nginx/auth/passwd.db
wyl:r5IXRXWSmlBk6

  2、编辑nginx的配置文件

server {
     listen       80;
     server_name  localhost;

     client_max_body_size    151m;

   location / {
         auth_basic "s1";  #虚拟主机认证命名 
         auth_basic_user_file /etc/nginx/auth/passwd.db; #虚拟主机用户名密码认证数据库     
         proxy_pass http://10.0.0.10:8088;  #访问
   }
}

  3、重启nginx

nginx -s reload

  4、访问测试

  需要输入密码和账号,输入正确的用户名和密码之后,才可以访问相应的内容。

  二、基于IP的访问控制

  通过IP进行访问控制基于nginx模块ngx_http_access_module

  1、模块安装

  nginx中内置ngx_http_access_module,除非编译安装时指定了–without-http_access_module

  2、指令

    1、allow

  语法: allow address | CIDR | unix: | all;

  默认值: -

  配置段: http, server, location, limit_except

  允许某个ip或者一个ip段访问。如果指定unix:,那将允许socket的访问。

    2、deny

  语法:deny address | CIDR | unix: | all;

  默认值: -

  配置段: http, server, location, limit_except

  禁止某个ip或者一个ip段访问.如果指定unix:,那将禁止socket的访问

  3、示例

location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}

  从上到下的顺序,类似iptables。匹配到了便跳出。如上的例子先禁止了192.16.1.1,接下来允许了3个网段,其中包含了一个ipv6,最后未匹配的IP全部禁止访问。

  被deny的将返回403状态码。

posted @ 2018-06-17 09:05  思维无界限  阅读(272)  评论(0编辑  收藏  举报