limit_req seems to have no effect, but I would prefer it did

zildjohn01 nginx-forum at nginx.us
Tue Oct 9 09:20:00 UTC 2012


I'm attempting to rate limit requests, and I'm unable to make the limit_req
directive have any effect. I've trimmed it down to a minimal test case.
Here's my complete nginx.conf (with only the server_name changed to protect
the innocent):

----------------------------------------------------------------------
worker_processes  2;

events {
	worker_connections  8192;
}

http {
	#keepalive_timeout      0s;
	#keepalive_requests     0;
	#limit_conn_zone  $binary_remote_addr  zone=conn_res:10m;
	#limit_conn       conn_res  1;
	limit_req_zone   $binary_remote_addr  zone=req_res:10m  rate=1r/s;
	limit_req        zone=req_res;

	server {
		listen       80;
		server_name  example.com  *.example.com;
		location / {
			return  410;
		}
	}
}
----------------------------------------------------------------------

I've tried various combinations of burst=2, nodelay, 1r/s or 1r/m, with and
without limit_conn, with and without keepalive, with and without "location
/", etc... and requests are never being limited, as shown by the access.log
entries below:

----------------------------------------------------------------------
while true; do
	curl 55.55.55.55 -H'Host: test.example.com'
done

12.34.56.78 - - [09/Oct/2012:08:47:03 +0000] "GET / HTTP/1.1" 410 158 "-"
"curl/7.21.1 (i686-pc-mingw32) libcurl/7.21.1 OpenSSL/0.9.8r zlib/1.2.3"
12.34.56.78 - - [09/Oct/2012:08:47:03 +0000] "GET / HTTP/1.1" 410 158 "-"
"curl/7.21.1 (i686-pc-mingw32) libcurl/7.21.1 OpenSSL/0.9.8r zlib/1.2.3"
12.34.56.78 - - [09/Oct/2012:08:47:03 +0000] "GET / HTTP/1.1" 410 158 "-"
"curl/7.21.1 (i686-pc-mingw32) libcurl/7.21.1 OpenSSL/0.9.8r zlib/1.2.3"
12.34.56.78 - - [09/Oct/2012:08:47:04 +0000] "GET / HTTP/1.1" 410 158 "-"
"curl/7.21.1 (i686-pc-mingw32) libcurl/7.21.1 OpenSSL/0.9.8r zlib/1.2.3"
etc...
----------------------------------------------------------------------

The error.log file is empty. I'm running nginx 1.3.7, compiled from source,
on an Amazon EC2 micro instance with the default image. (For kicks, I also
tried 1.0.15, with no luck.) Here is /proc/version:

Linux version 3.2.21-1.32.6.amzn1.x86_64 (mockbuild at gobi-build-31004) (gcc
version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) ) #1 SMP Sat Jun 23 02:32:15
UTC 2012

Am I missing something obvious here?

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,231530,231530#msg-231530



More information about the nginx mailing list