-
http_access_module
基于IP的访问控制模块 -
http_auth_basic_module
基于用户的信任登陆模块
一 、http_access_module
(1) 配置语法
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
(2)vi /etc/nginx/conf.d/default.conf
打开 default.conf 文件并添加配置
~ ^/test.html
含义:对访问路径做模式匹配, 匹配根目录域名下以test.html 开头的目录。
配置在location下,只会对该location的访问做限制
所以以上配置的作用是:禁止 ip 为 192.168.0.52的客户端访问根目录域名下以test.html 开头的目录或文件。
(3) access_module 局限性
access_module 是基于remote_addr 变量来识别客户端ip,而remote_addr 是直接和服务端建立连接的ip。如上图所示:ip1 通过ip2去访问ip3,remote_addr被识别成ip2,准确性不高。
相应的解决方法有两种:
- 使用x_forwarded_for
Nginx中有相应的http_x_forwarded_for
变量,用来存储真实的客户端ip值及各级代理的ip值,以逗号分隔,格式为ClientIP, Proxy(1)IP, Proxy(2)IP,
但是x_forwarded_for 是http协议要求的,并非所有cdn厂商或者代理厂商都会按这种要求做,甚至存在被客户端修改的可能性。 - 变量传递
Nginx 支持自定义变量,所以可以在http头信息中定义一个变量传递remote_addr,一级一级携带到服务器。
二 、http_auth_basic_module
(1)配置语法
Syntax:auth_basic string | off;
Default: auth_basic string;
Context: http, server, location, limit_except;
Syntax:auth_basic_user_file file;
Default: --
Context: http, server, location, limit_except
(2)示例演示
- 安装 密码工具
yum install httpd-tools -y
-
htpasswd -c /etc/nginx/auth_conf candy
,创建名为candy的密码文件,该文件名称即为之后的登陆账号,期间需要两次输入密码。
more auth_conf
查看信息 -
vi /etc/nginx/conf.d/default.conf
打开 default.conf 文件并添加配置
- 重载配置文件后浏览器访问,需要输入账号密码,账号即为之前输入的密码文件名称,密码即为之前输入的密码。
(3)auth_basic_module局限性
- 用户信息依赖文件方式
- 操作管理机械,效率低下
解决方案:
- a. Nginx结合LUA实现高效验证
- b. Nginx 和 LDAP打通,利用nginx-auth-ldap模块