2015-09-15 33 views
7

मैं वास्तव में एक छोटे से हैरान हूँ कि मैं googling के एक जोड़े घंटे के बाद कुछ भी नहीं मिला है, लेकिन समस्या इस प्रकार है:nginx में limit_req के लिए शेष गिनती सेट एक्स RateLimit-शेष हैडर

मैं चाहता हूँ nginx मेरी एपीआई के लिए मेरी थ्रोटल के रूप में सेवा करने के लिए।

limit_req_zone $binary_remote_addr zone=limit:2m rate=10r/m;

युक्त उम्मीद limit_req zone=limit nodelay;

मेरी location निर्देश के साथ

मैं प्यार होता nginx प्रतिक्रिया संदेश में हेडर देते है करने के लिए:

मेरे कॉन्फ़िग फ़ाइल limit_req_zone की एक अच्छी तरह से उद्धृत उदाहरण शामिल दोनों X-RateLimit-Remaining और X-RateLimit-Reset विशेषताओं के लिए। असल में nginx rate=10r/m के सक्रिय गिनती का उपयोग X-RateLimit-Remaining और एक ही rate=10r/m मूल्य की समय सीमा को भरने के लिए कितने सेकंड एक ताज़ा से पहले छोड़ दिया जाता है साथ X-RateLimit-Reset पॉप्युलेट करने के लिए की है।

http { 
    limit_req_zone $binary_remote_addr zone=login:10m rate=2r/s; 
    limit_req_status 429; 
    limit_conn_status 429; 

    server { 
     listen  80; 
     server_name [removed]; 

     location/{ 
      limit_req zone=limit nodelay; 

      proxy_pass http://reverse-proxy-example; 
      add_header X-RateLimit-Remaining [nginx variable?]; 
      add_header X-RateLimit-Reset [nginx variable?] 
     } 
} 

विचार? मुमकिन? इन नंबरों को पाने के लिए आवेदन से टकराने से बचने के लिए प्यार करोगे।

उत्तर

-1

PackngoPacket से एक ऐसा फ़ंक्शन है जो आपको करने की आवश्यकता के लिए उपयुक्त हो सकता है। packngo से

नमूना:

func (r *Response) populateRate() { 
    // parse the rate limit headers and populate Response.Rate 
    if limit := r.Header.Get(headerRateLimit); limit != "" { 
     r.Rate.RequestLimit, _ = strconv.Atoi(limit) 
    } 
    if remaining := r.Header.Get(headerRateRemaining); remaining != "" { 
     r.Rate.RequestsRemaining, _ = strconv.Atoi(remaining) 
    } 
    if reset := r.Header.Get(headerRateReset); reset != "" { 
     if v, _ := strconv.ParseInt(reset, 10, 64); v != 0 { 
      r.Rate.Reset = Timestamp{time.Unix(v, 0)} 
     } 
    } 
} 
संबंधित मुद्दे