2017-04-12 84 views
2

这是我nginx的配置设置 -Nginx的:限速设置不工作

{ 
    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应该被拒绝的一些请求。

请我解决这个问题。

+0

与我相同,这方面的任何解决方案? – pahnin

回答

1

这是我的配置。现在它正确显示了在通过阈值后的请求。

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次。您可以查看下面的结果 -

输出: enter image description here