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

原文地址:https://www.cnblogs.com/chrdai/p/11333360.html