Comments on Rate Limiting with Nginx

Rate Limiting With nginx. This article explains how to use the nginx HttpLimitReqModule to limit the number of requests for a given session. This is useful, for example, if your site is hammered by a bot doing multiple requests per second and thus increasing your server load. With the HttpLimitReqModule you can define a rate limit, and if a visitor exceeds this rate, he will get a 503 error.

5 Comment(s)

Add comment

Please register in our forum first to comment.

Comments

By: David

yeahh nice stuff thank you man !!

By: Arien

Hi Falko.

This is a perfect step to protect an entire server, but how to deal with multiple vhost and ISPConfig?

I mean, I can define the zone in nginx.conf for the entire server, but where must I define the location containers?

Must I do it per vhost? What's about ispconfig.vhost and apps.vhost? They are restored by default after few minutes...

Thanks in avance for your time!

By: yeaahahhhhh

thannkkkk youuuuuuuuuuu this is worked for me

i added here:

    location / {

limit_req zone=one burst=5 nodelay;

        try_files $uri $uri/ /index.php?$args;

 

        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {

            expires     10y;

        }

and when i was cry i found you bro and i added here:

 

        location ~ [^/]\.php(/|$) {

 

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

            if (!-f $document_root$fastcgi_script_name) {

                return  404;

            }

 

            fastcgi_pass    127.0.0.1:9001;

            fastcgi_index   index.php;

            include         /etc/nginx/fastcgi_params;

            limit_req zone=one burst=5;

        }

and this is working now and my images works :D

By: soph

This doesn't work anymore.

 

# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: [emerg] zero size shared memory zone "one"

nginx: configuration file /etc/nginx/nginx.conf test failed

By: Kepavi

It does work...

you are probably missing directive

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

So in your /etc/nginx/nginx.conf under http {... put the declaration of the zone

Then in your virtual host file e.g. /etc/nginx/sites-enabled/my.site.cnf under location call the limit_req_zone= one burst=5;

then try nginx -t