这是我的nginxconfiguration设置 –
{ limit_req_zone $binary_remote_addr zone=main:10m rate=1r/s; # on top of conf file ... location /login { limit_req zone=main burst=3 nodelay; ModSecurityEnabled on; ModSecurityConfig /usr/local/nginx/conf/modsecurity.conf; proxy_pass http://localhost:4000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
}
当使用以下代码多次访问api URL( http:// localhost:4000 / login )时 –
for i in {0..2000}; do (curl -Is http://localhost:4000/login | head -n1 &) 2>/dev/null; done
我总是得到200响应代码,而不是得到503应该被拒绝的一些请求。
请我解决这个问题。
这是我的配置。 现在正确的显示200和503的请求后,
limit_req_zone $http_x_forwarded_for zone=req_limit_per_ip:100m rate=10r/m; limit_conn_zone $http_x_forwarded_for zone=conn_limit_per_ip:100m; server { listen 80; server_name *.xxxxxx.com; add_header 'Access-Control-Allow-Headers' "X-Forwarded-For; X-Forwarded-Proto; X-Forwarded-Port; Host; X-Amzn-Trace-Id; Connection"; #add_header 'Access-Control-Allow-Headers' "X-Requested-With"; add_header 'Access-Control-Allow-Methods' "GET, POST, OPTIONS"; #add_header 'Access-Control-Allow-Origin' "$http_origin"; server_tokens off; client_body_timeout 60s; client_header_timeout 60s; add_header 'X-Frame-Options' "SAMEORIGIN"; add_header 'Strict-Transport-Security' "max-age=31536000; includeSubDomains" ; location /api/ { ModSecurityEnabled off; ModSecurityConfig /usr/local/nginx/conf/modsecurity.conf; proxy_pass http://xx.xxx.xxx.xxx:7000/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; send_timeout 60s; } }
为了检查效果,我创建了一个.js文件,并在循环中请求了上述url 20次。 你可以检查下面的结果 –
输出: