鼎鼎知识库
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

04基础练习.md 1.8KB

限制请求

limit_conn_zone限速配置

http {
	limit_conn_zone $binary_remote_addr zone=one:10m; //为每个IP定义一个存储session的容器,一个session有32bytes, 这里10兆的容器,(10*1024*1024)/32=320000个session
	
	server {
		listen 80;
		server_name www.abc.com;
		location / {
			limit_conn one 1; //one对应上面的one, 1限制每个IP只能发起一个并发连接
			limit_rate 300k;//对连接的限速,而不是对IP限速。如果一个IP允许两个并发连接,那么针对这个IP的限速limit_rate*2
		}
	}
}

limit_req_zone限制访问频率

http {
	limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
	
	server {
		location / {
			limit_req zone=one bust=10;//每个ip一秒钟只处理一个请求,这样会导致其它队列等待,占用tcp连接。如果limit_req zone=one bust=10 nodelay; 就可以把多余的请求丢掉,不会占用tcp连接
		}
	}
}

实际应用

在实际应用中,不能对所有资源限制,比如图片什么的不能限制,所以需要把图片等排除出来。

http {
	limit_conn_zone $binary_remote_addr zone=addr:10m;
	limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
	
	server {
		location ~ .*\.(gif|png|css|js|icon)$ {
			proxy_set_header Host $http_host;
			proxy_set_hreader X-Real_IP $romote_addr;
			proxy_set_hreader X-Forwarded-For $proxy_add_x_forwarded_for;
		}
		
		location ~* .*\.(jpeg|jpg|JPG)$ {
			proxy_set_header Host $http_host;
			proxy_set_header X-Real_IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
		
		location / {
			proxy_set_header Host $http_host;
			proxy_set_header X-Real_IP $remote_addr;
			proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
			limit_conn addr 3;
			limit_req zone=one bust=5;
		}
	}
}