Nginx基础五(Nginx的访问控制)

  • 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 文件并添加配置
Nginx基础五(Nginx的访问控制)_第1张图片
default.conf 配置.png

~ ^/test.html 含义:对访问路径做模式匹配, 匹配根目录域名下以test.html 开头的目录。
配置在location下,只会对该location的访问做限制
所以以上配置的作用是:禁止 ip 为 192.168.0.52的客户端访问根目录域名下以test.html 开头的目录或文件。

(3) access_module 局限性
Nginx基础五(Nginx的访问控制)_第2张图片
remote_addr 和 x_forwarded_for.png

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 文件并添加配置
Nginx基础五(Nginx的访问控制)_第3张图片
default.conf.png
  • 重载配置文件后浏览器访问,需要输入账号密码,账号即为之前输入的密码文件名称,密码即为之前输入的密码。
Nginx基础五(Nginx的访问控制)_第4张图片
登陆需要密码.png
(3)auth_basic_module局限性
  • 用户信息依赖文件方式
  • 操作管理机械,效率低下

解决方案:

  • a. Nginx结合LUA实现高效验证
  • b. Nginx 和 LDAP打通,利用nginx-auth-ldap模块

你可能感兴趣的:(Nginx基础五(Nginx的访问控制))