这是我的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 :(得分:2)
这是我的配置。现在它正确显示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文件,并在循环中请求了20次以上的url。您可以查看以下结果 -
答案 1 :(得分:0)
对我来说,limit_req也没有用。问题是订单错误 - limit_req
应该在proxy_pass
使用:
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
server {
listen 443;
server_name example.com;
limit_req zone=req_limit_per_ip burst=10 nodelay;
location / {
proxy_pass http://be_server;
}
}
作品
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
server {
listen 443;
server_name example.com;
location / {
limit_req zone=req_limit_per_ip burst=10 nodelay;
proxy_pass http://be_server;
}
}
不起作用
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
server {
listen 443;
server_name example.com;
location / {
proxy_pass http://be_server;
limit_req zone=req_limit_per_ip burst=10 nodelay;
}
}