Nginx10-访问控制 accsess_module

相关模块

  1. http_access_module # 基于IP的访问控制

语法

1
2
3
4
语法:allow address | CIDR | unix:| all;
默认:没有进行配置
位置:可以在http、server、location、limit_except
作用:允许访问的地址
1
2
3
4
语法:deny address | CIDR | unix:| all;
默认:没有进行配置
位置:可以在http、server、location、limit_except
作用:不允许访问的地址

配置实例

  1. 以admin.html开头的页面不允许222.128.189.17访问,可以允许其他访问(~ ^ 代表匹配以admin.html开头的页面)

    1
    2
    3
    4
    5
    6
    location ~ ^/admin.html {
    root /opt/app/code;
    deny 222.128.189.17;
    allow all;
    index index.html index.htm;
    }
  2. 只允许222.128.189.0这个网段来访问,其他的都阻止

    1
    2
    3
    4
    5
    6
    location ~ ^/admin.html {
    root /opt/app/code;
    allow 222.128.189.17;
    deny all;
    index index.html index.htm;
    }

模块的局限性

使用http_access_module,中间可能存在代理的情况,如果中间有代理,http_access_module获取到的remote_addr是代理的IP,那么是这么做不准确的

局限的解决方式

  1. 采用别的HTTP头信息控制访问,如:HTTP_X_FORWARD_FOR
  2. 结合geo模块
  3. 通过HTTP自定义变量传递

HTTP_X_FORWARD_FOR介绍

为了解决上面的问题,引入了 http_x_forwarded_for【但是x_forwarded_for是一种格式规范,不一定所有的CDN服务商都有,且是http头信息,存在被修改的可能,所以虽然能解决http_access_module的问题,但是并不理想。】

http_x_forwarded_for的构成:第一个是Client IP,后面的就是Proxy IP