Nginx访问控制(持续更新)


NGINX实现IF语句里的AND,OR多重判断
正常清空下使用allow,deny 可以完成,但是对于同时过滤ip和页面,就无法按照正常规则去实现

Nginx的rewrite规则参考

  • ~ 为区分大小写匹配
  • ~* 为不区分大小写匹配
  • !和!*分别为区分大小写不匹配及不区分大小写不匹
  • -f和!-f用来判断是否存在文件
  • -d和!-d用来判断是否存在目录
  • -e和!-e用来判断是否存在文件或目录
  • -x和!-x用来判断文件是否可执行
  • last 相当于Apache里的[L]标记,表示完成rewrite,呵呵这应该是最常用的
  • break 终止匹配, 不再匹配后面的规则
  • redirect 返回302临时重定向 地址栏会显示跳转后的地址
  • permanent 返回301永久重定向 地址栏会显示跳转后的地址
Nginx参数 解释
arg_PARAMETER 这个变量包含GET请求中,如果有变量PARAMETER时的值。
args 这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah;
binary_remote_addr 二进制的客户地址。
body_bytes_sent 响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。
content_length 请求头中的Content-length字段。
content_type 请求头中的Content-Type字段。
cookie_COOKIE cookie COOKIE变量的值
document_root 当前请求在root指令中指定的值。
document_uri 与uri相同。
host 请求主机头字段,否则为服务器名称。
hostname Set to themachine’s hostname as returned by gethostname
http_HEADER
is_args 如果有args参数,这个变量等于”?”,否则等于””,空值。
http_user_agent 客户端agent信息
http_cookie 客户端cookie信息
limit_rate 这个变量可以限制连接速率。
query_string 与args相同。
request_body_file 客户端请求主体信息的临时文件名。
request_method 客户端请求的动作,通常为GET或POST。
remote_addr 客户端的IP地址。
remote_port 客户端的端口。
remote_user 已经经过Auth Basic Module验证的用户名。
request_completion 如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。
request_method GET或POST
request_filename 当前请求的文件路径,由root或alias指令与URI请求生成。
request_uri 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。
scheme HTTP方法(如http,https)。
server_protocol 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
server_addr 服务器地址,在完成一次系统调用后可以确定这个值。
server_name 服务器名称。
server_port 请求到达服务器的端口号。

NGINX实现IF语句里的AND,OR多重判断

nginx的配置中不支持if条件的逻辑与/逻辑或运算 ,并且不支持if的嵌套语法,我们可以用变量的方式来实现
具体方法为AND 就用变量叠加,OR就用0或1切换

如定义结尾以swagger-ui.html和api-docs的页面,只能由202.101.172.35和8.8.8.8访问:

  • 伪代码
if ($remote_addr !~ "(202.101.172.35|8.8.8.8)" && $request_uri ~* (swagger-ui.html|api-docs)$) {
  return 403;
}
  • 上述伪代码Nginx实现
location / {
    set $flag 0;
    if ($remote_addr !~ "122.224.128.14") {
        set $flag "${flag}1";
    }
    if ($request_uri ~* (swagger-ui.html|api-docs)$) {
        set $flag "${flag}2";
    }
    if ($flag = "012") {
        return 403;
    }
}

文章作者: SakuraGaara
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 SakuraGaara !
  目录