Nginx对请求的超严格限制配置

下面的配置中,应对需求。

1、过滤[java、curl、WMFSDK]开头的UA,不区分大小写。

2、符合AppleCoreMedia、iPhone、iPad、Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)、Apache-HttpClient/UNAVAILABLE (java 1.4)

3、UAreferer 可以为空。

PS:需求看似复杂,拆分来看,也不是很麻烦。。关键要静下心来搞。。

Nginx以为不支持else所以这里要使用else功能就要自定义变量拼接,然后处理。

location /resource/ {

  #error_aua 0(ua right) 1(ua error)

  #error_ua 0(ua right) 1(ua error)

  #error_rf 0(refer right) 1(referer error)

  #UA范围值
  set $error_aua 0;

  #UA白名单值
  set $error_ua 0;

  #referer白名单值
  set $error_rf 0;

  #referer拼接值
  set $error_req "";

  #UA判断拼接值 
  set $error_uas "";
  if ($http_user_agent ~* "WMFSDK|Java|curl") {
    set $error_aua 1;
  }
  if ( $http_user_agent !~* "(AppleCoreMedia|iPhone|iPad|(^Mozilla/4.0\s{1}\(compatible;\s{1}MSIE\s{1}6.0;\s{1}Windows\s{1}NT\s{1}5.1;\s{1}SV1\)$)|(Apache-HttpClient/UNAVAILABLE\s{1}\(java\s{1}1.4\)$))" ) {
    set $error_ua 1;
  }
  if ( $http_user_agent = "" ) {
    set $error_ua 0;
  }
  set $error_uas $error_aua$error_ua;
  if ( $error_uas = "11" ) {
    return 403;
  }
  valid_referers none blocked soulassassin.tk 192.168.36.20 192.168.35.32 192.168.36.54  192.168.36.68;
  if ( $invalid_referer ) {
    set $error_rf 1;
  }
  set $error_req $error_ua$error_rf;
  if ( $error_req = "11" ){
    return 403;
  }
  root /data/;
}


posted @ 2012-05-31 19:23  呆呆木鸡  阅读(1472)  评论(0编辑  收藏  举报