1. 访问控制

访问控制,一般是指针对客户端的IP地址进行访问限制的配置,如本地资源仅限制局域网用户访问,而对外网站允许所有IP地址访问。

1.1. http_access_module

1.1.1. alllow

  1. Syntax: allow address|CIDR|all|unix: ;
  2. Default: Close
  3. Context: http,server,location,limit_except

1.1.2. deny

  1. Syntax: deny address|CIDR|all|unix: ;
  2. Default: Close
  3. 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

  1. server {
  2. listen 80 ;
  3. server_name localhost ;
  4. location /status {
  5. stub_status ;
  6. allow 127.0.0.1 ;
  7. deny all ;
  8. }
  9. }
  • 测试

[root@centos-81 ~]# curl 127.0.0.1/status

  1. Active connections: 1
  2. server accepts handled requests
  3. 10 10 10
  4. Reading: 0 Writing: 1 Waiting: 0

[root@centos-81 ~]# curl 192.168.1.81/status

  1. <html>
  2. <head><title>403 Forbidden</title></head>
  3. <body bgcolor="white">
  4. <center><h1>403 Forbidden</h1></center>
  5. <hr><center>nginx/1.14.2</center>
  6. </body>
  7. </html>
  • 其它实现的方式
    • 使用监听在 127.0.0.1:80 端口上的虚拟主机作为状态页面
    • 使用xxx.localhost的虚拟主机作为状态页面

2.2. 文件下载服务器(如yum源)

  • 配置 [root@centos-81 conf.d]# cat yum_repo.conf

    1. server {
    2. listen 80 ;
    3. server_name yum.heyang.com ;
    4. location / {
    5. root /mnt ;
    6. autoindex on ;
    7. allow 192.168.0.0/16 ;
    8. allow 172.24.0.0/16 ;
    9. deny all ;
    10. }
    11. }
  • 测试

未命名图片.png