2015-04-15 14 views
5

पर आधारित nginx में दर सीमा शायद मैं एक खराब सवाल पूछ रहा हूं लेकिन मैं आईपी आधारित के बजाय कस्टम http शीर्षलेख के आधार पर nginx में दर सीमा लागू करना चाहता हूं। मेरा आईपी आधारित कॉन्फ़िगरेशन काम कर रहा है लेकिन मैं कस्टम http शीर्षलेख का उपयोग करने में सक्षम नहीं हूं। मैं क्या चाहता हूं कि यदि http अनुरोध में कोई विशेष शीर्षलेख मौजूद है तो सीमित सीमा लागू की जानी चाहिए अन्यथा नहीं।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; 
     } 
} 

हालांकि, दर सीमित है, भले ही कोई शीर्ष लेख वर्तमान लागू किया जाता है। पीएस userAndroidId मेरा अनुरोध हेडर है।

उत्तर

3

मुझे लगता है कि आप इसे मानचित्र के साथ प्रबंधित कर सकते हैं। यदि हेडर मौजूद है, तो क्लाइंट के आईपी या खाली स्ट्रिंग पर एक वैरिएबल को मैप करें, और ज़ोन की कुंजी के रूप में उस मान का उपयोग करें। यदि नक्शा मेल नहीं खाता है, तो खाली स्ट्रिंग दर से सीमित होने वाली दर को रोक देगा।

इस तरह कुछ (परीक्षण नहीं किया है, लेकिन काम करना चाहिए)

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

यह userAndroidId शीर्षक के लापता के एक खाली मैप कर देंगे "", और $ binary_remote_addr के लिए किसी भी अन्य मूल्य। इसके बाद आप अपने क्षेत्र में $ सीमा चर का उपयोग कर सकते हैं:

limit_req_zone $limit zone=one:10m rate=1r/s; 
संबंधित मुद्दे