我是靠谱客的博主 烂漫翅膀,这篇文章主要介绍Nginx访问控制之http_access_module与http_auth_basic_module,现在分享给大家,希望可以做个参考。

文章目录

    • 基于IP的访问控制`http_access_module`
      • 示例一:拒绝192.168.1.4访问,允许其他所有主机访问
      • 示例二:只允许192.168.1.4访问,不允许其他
      • 示例三:只允许本机访问状态监控/mystatus
      • `http_access_module`的局限性
    • 基于用户登陆认证`http_auth_basic_module`
      • 示例:只有用户lss和admin能通密码访问下载站点
      • `http_auth_basic_module`局限性

  • 基于IP的访问控制http_access_module
  • 基于用户登陆认证http_auth_basic_module

基于IP的访问控制http_access_module

参考文档:http://nginx.org/en/docs/http/ngx_http_access_module.html

  • 允许配置语法
复制代码
1
2
3
4
5
Syntax: allow address | CIDR | unix: | all; Default: — Context: http, server, location, limit_except
  • 拒绝配置语法
复制代码
1
2
3
4
5
Syntax: deny address | CIDR | unix: | all; Default: — Context: http, server, location, limit_except

示例一:拒绝192.168.1.4访问,允许其他所有主机访问

复制代码
1
2
3
4
5
6
7
#拒绝访问配置 location ~ ^/1.html { deny 192.168.1.4; allow all; }

示例二:只允许192.168.1.4访问,不允许其他

复制代码
1
2
3
4
5
6
7
#拒绝访问配置 location ~ ^/1.html { allow 192.168.1.4; deny all; } //注意先允许后拒绝,位置写反了达不到效果

示例三:只允许本机访问状态监控/mystatus

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
location /mystatus { stub_status on; allow 127.0.0.1; deny all; } 效果:192.168.1.4访问192.168.1.17 [root@rhel ~]# curl 192.168.1.17/ aaaaa [root@rhel ~]# curl 192.168.1.17/mystatus <html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.14.1</center> </body> </html> [root@rhel ~]# # 自己就可以访问状态监控 [root@mysql-slave ~]$ curl 127.0.0.1/mystatus Active connections: 1 server accepts handled requests 30 30 42 Reading: 0 Writing: 1 Waiting: 0 [root@mysql-slave ~]$

http_access_module的局限性

客户端 代理服务器 真实WEB服务器 客户端使用代理服务器访问真实WEb服务器 WEB服务器使用remote_address捕捉能到代理服务器IP,无法捕捉客户端真实IP 客户端 代理服务器 真实WEB服务器
  • 若使用http_x_forwarded_for记录真实客户端IP地址以及代理服务器IP
客户端 代理服务器 真实WEB服务器 客户端使用代理服务器访问真实WEb服务器,x_forwarded_for=ip1 WEB服务器捕捉到代理服务器x_forwarded_for=ip1,ip2 客户端 代理服务器 真实WEB服务器
  • 解决方式:
  1. 采用http头信息控制访问,代理及web服务器开启http_x_forworded_for,(要大家都遵循开启)
  2. 结合geo模块
  3. 通过HTTP自动以变量方式传递

基于用户登陆认证http_auth_basic_module

参考文档:http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html

  • 配置语法:
复制代码
1
2
3
4
5
Syntax: auth_basic string | off; Default: auth_basic off; #默认是关闭的 Context: http, server, location, limit_except
  • 协议启用用户名和密码验证。指定的参数用作realm,特殊值off允许取消auth_basic从先前配置级别继承的指令的效果
复制代码
1
2
3
4
5
6
7
8
9
Syntax: auth_basic_user_file file; Default: — Context: http, server, location, limit_except # 指定保存用户名和密码的文件,格式如下 name1:password1 name2:password2:comment name3:password3

示例:只有用户lss和admin能通密码访问下载站点

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 需要先按装依赖组件生成账户密码:yum install -y httpd-tools [root@mysql-slave ~]$ htpasswd -c /etc/nginx/auth_conf lss New password: Re-type new password: Adding password for user lss [root@mysql-slave ~]$ cat /etc/nginx/auth_conf lss:$apr1$E/BT5LqC$7I0thvfHLxITHGZPTyzj70 # 新增用户 [root@mysql-slave ~]$ htpasswd -b /etc/nginx/auth_conf admin 123123 Adding password for user admin [root@mysql-slave ~]$ cat /etc/nginx/auth_conf lss:$apr1$E/BT5LqC$7I0thvfHLxITHGZPTyzj70 admin:$apr1$EJQbPeri$Vr/X.yk2YOEHkUPxp0V8Z1 [root@mysql-slave ~]$ [root@mysql-slave /etc/nginx]$ vim nginx.conf ... location /download { alias /soft/scripts; autoindex on; autoindex_localtime on; autoindex_exact_size off; charset utf-8,gbk; limit_rate_after 10m; limit_rate 128; auth_basic "请输入账号密码!"; auth_basic_user_file /etc/nginx/auth_conf; }

在这里插入图片描述

http_auth_basic_module局限性

  1. 用户信息依赖文件方式,管理操作机械,效率不高

解决方法:

  1. Nginx结合LUA实现高效验证
  2. Nginx结合LDAP,利用nginx_auth_ldap模块

最后

以上就是烂漫翅膀最近收集整理的关于Nginx访问控制之http_access_module与http_auth_basic_module的全部内容,更多相关Nginx访问控制之http_access_module与http_auth_basic_module内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部