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