Home >Operation and Maintenance >Nginx >How to limit access frequency per unit time in nginx
First of all, I will say that I encountered this problem because the website was attacked and Alibaba Cloud called the police. I thought of limiting the access frequency instead of limiting IP addresses (the plan for limiting IP addresses will be given later). The status code returned by nginx when the connection resources are exhausted is 502. After adding the restrictions of this solution, it returns 599, which is different from the normal status code.
The steps are as follows:
First add the following content to nginx.conf:
map $http_x_forwarded_for $clientrealip { "" $remote_addr; ~^(?p<firstaddr>[0-9\.]+),?.*$ $firstaddr; } ###safe setting to limit the request number per second limit_req_status 599; limit_req_zone $clientrealip zone=allips:70m rate=5r/s;
The session pool size is 70m. If there are many restricted IPs, you can adjust it smaller. If there are few restricted IPs, If there are many accessible IPs, you need to increase
to 5 requests per second. This is also adjusted according to the situation. 5 is more appropriate or a little too large.
Then modify www.xxoo.com.conf (this is lnmp’s configuration file for each virtual host). In the server, add the following line above the location:
limit_req zone=allips burst=5 nodelay;
Restart nginx in this way You can write a script to test concurrency.
A python concurrent script is provided as follows:
import threading import time,urllib2 url = 'http://sf.gg/' def worker(): try: response = urllib2.urlopen(url) print response.getcode() except urllib2.httperror, e: print e.code for i in range(2000): t = threading.thread(target=worker) t.start()
Both 2000 and http://sf.gg/ can be modified, and then execute python *.py > out to analyze out The status codes in the file are distributed. If 599 is particularly common, the frequency limit will play a role.
The above is the detailed content of How to limit access frequency per unit time in nginx. For more information, please follow other related articles on the PHP Chinese website!