1. 访问控制
访问控制,一般是指针对客户端的IP地址进行访问限制的配置,如本地资源仅限制局域网用户访问,而对外网站允许所有IP地址访问。
1.1. http_access_module
1.1.1. alllow
Syntax: allow address|CIDR|all|unix: ;
Default: Close
Context: http,server,location,limit_except
1.1.2. deny
Syntax: deny address|CIDR|all|unix: ;
Default: Close
Context: http,server,location,limit_except
1.2. 说明
- 支持具体的IP(ipv4和ipv6)、网段
- 一个请求进来后,会从上到下进行规则的遍历,直到找到符合的规则为止
http_access_module 一般仅用于内部的简单资源的访问限制,如yum仓库,状态页等
1.3. http_access_module局限性
在实际的服务器架构中,大多数会涉及到CDN、负载均衡、反向代理等,导致$remote_addr的值被改变,无法有效的限制客户端的访问(一般是外网),一般有以下三种解决方案:
使用其他的http头信息控制访问
http_x_forward_for会记录包括客户端地址、经过的反向代理或者CDN的地址等一系列IP地址,因此可以使用该方式对其进行访问控制。
x_real_ip 也是常用的一种自添加的变量。
- 使用geo模块
- 使用http自定义变量
2. 案例
2.1. Nginx的状态页
- 配置
[root@centos-81 conf.d]# cat status.conf
server {
listen 80 ;
server_name localhost ;
location /status {
stub_status ;
allow 127.0.0.1 ;
deny all ;
}
}
- 测试
[root@centos-81 ~]# curl 127.0.0.1/status
Active connections: 1
server accepts handled requests
10 10 10
Reading: 0 Writing: 1 Waiting: 0
[root@centos-81 ~]# curl 192.168.1.81/status
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.14.2</center>
</body>
</html>
- 其它实现的方式
- 使用监听在 127.0.0.1:80 端口上的虚拟主机作为状态页面
- 使用xxx.localhost的虚拟主机作为状态页面
2.2. 文件下载服务器(如yum源)
配置 [root@centos-81 conf.d]# cat yum_repo.conf
server {
listen 80 ;
server_name yum.heyang.com ;
location / {
root /mnt ;
autoindex on ;
allow 192.168.0.0/16 ;
allow 172.24.0.0/16 ;
deny all ;
}
}
测试