# 限制请求 ### 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; } } } ```