Nginx Rate limiting for HTTPS requests
rickGsp
nginx-forum at forum.nginx.org
Tue May 22 16:37:18 UTC 2018
>>- Make sure the $host variable you use for the limiting is not
>>empty and not changed between requests created by your testing
>>tool. Try logging the variable to see if it changes or not.
>>Alternatively, replace it with a static string to see if it helps.
Checked. $host variable is set for all the requests.
>>- Make sure there are no unrelated requests in the log. In
>>particular, you may want to use different logs in the server{}
>>block you are limiting and in the http{} block.
Checked. There are no unrelated requests in the log.
>>- Try another tool to see if you are able to reproduce the same
>>effect. Something simple like "ab" or "http_load" might be a
>>good choice.
Checked with "ab" with as following (concurrency 700 requests);
ab -n 20000 -c 700 https://9.0.0.10:443/test.html
Here is the piece of output. As per the report test ran for approx. 50
seconds and 20000-14622 = 5278 requests returned with success. This is as
expected as per rate limiting at 100r/s for 50 seconds test. Notice that
Mean requests processed per second is 396.
Concurrency Level: 700
Time taken for tests: 50.437 seconds
Complete requests: 20000
Failed requests: 14722
Requests per second: 396.53 [#/sec] (mean)
Access log report for this test as per the following command seems to be
fine: grep ' 200 ' /path/to/log | awk '{print $4}' | uniq -c
111 [22/May/2018:15:35:04
101 [22/May/2018:15:35:05
95 [22/May/2018:15:35:06
98 [22/May/2018:15:35:07
97 [22/May/2018:15:35:08
106 [22/May/2018:15:35:09
95 [22/May/2018:15:35:10
99 [22/May/2018:15:35:11
104 [22/May/2018:15:35:12
106 [22/May/2018:15:35:13
In another test, I ran two instances of "ab" in parallel with same
configuration and following is the output.This is again approx. 50 seconds
test. By combining both the reports (20000+20000) - (9344+10239) = 20417
requests returned with success. This is four times of expected 5000
requests/sec rate. I would like to understand this behaviour. I guess this
is happening in my tests as well. In my case I just keep pushing requests
without waiting for response.
First instance:
Concurrency Level: 700
Time taken for tests: 46.944 seconds
Complete requests: 20000
Failed requests: 9344
Requests per second: 426.04 [#/sec] (mean)
Second Instance:
Concurrency Level: 700
Time taken for tests: 53.344 seconds
Complete requests: 20000
Failed requests: 10239
Requests per second: 374.92 [#/sec] (mean)
Access log report for this test as per the following command does not seem
to be fine: grep ' 200 ' /path/to/log | awk '{print $4}' | uniq -c
180 [22/May/2018:15:52:59
276 [22/May/2018:15:53:00
33 [22/May/2018:15:53:01
20 [22/May/2018:15:53:00
70 [22/May/2018:15:53:01
1 [22/May/2018:15:53:00
181 [22/May/2018:15:53:01
16 [22/May/2018:15:53:02
2 [22/May/2018:15:53:01
99 [22/May/2018:15:53:02
1 [22/May/2018:15:53:01
177 [22/May/2018:15:53:02
329 [22/May/2018:15:53:03
8 [22/May/2018:15:53:02
Posted at Nginx Forum: https://forum.nginx.org/read.php?2,279802,279908#msg-279908
More information about the nginx
mailing list