2015-04-15 20 views
5

Może zadaję słabe pytanie, ale chcę zastosować limit szybkości w nginxie na podstawie niestandardowego nagłówka http zamiast na podstawie IP. Moja konfiguracja oparta na protokole IP działa, ale nie mogę obejść się przy użyciu niestandardowego nagłówka http. Chciałbym, aby w przypadku żądania http znajdował się konkretny nagłówek, w przeciwnym razie należy zastosować ograniczenie szybkości.Limit szybkości w nginxie w oparciu o nagłówek http

conf

 http { 
      limit_req_zone $http_userAndroidId zone=one:10m rate=1r/s; 

     location ^~ /mobileapp{ 
      set $no_cache 1; 
      # set rate limit by pulkit 
      limit_req zone=one burst=1; 
      limit_req_status 429; 
      error_page 429 /50x.html; 
     } 
} 

Jednak ograniczającym szybkość jest stosowana nawet jeśli nie jest obecny nagłówek. P.S. userAndroidId to mój nagłówek żądania.

Odpowiedz

3

Myślę, że możesz sobie z tym poradzić z mapą. Jeśli nagłówek jest obecny, zmapuj zmienną na adres IP klienta lub pusty łańcuch i użyj tej wartości jako klucza strefy. Jeśli mapa nie jest zgodna, pusty ciąg uniemożliwi ograniczenie szybkości.

Coś takiego (nie testowane, ale powinny działać)

map $http_userandroidid $limit { 
    default ""; 
    "~.+" $binary_remote_addr; 
} 

To będzie mapować pusty brakujących userAndroidId nagłówek „”, a każda inna wartość do $ binary_remote_addr. Następnie możesz użyć zmiennej $ limit w swojej strefie:

limit_req_zone $limit zone=one:10m rate=1r/s; 
Powiązane problemy