如果我直接点击php页面(index.php),这个limit_req配置是有效的,但如果它命中/ [漂亮网址]并且将其重写为index.php?$ args。
limit_req_zone $binary_remote_addr zone=dynamic:10M rate=1r/s;
limit_req_zone $binary_remote_addr zone=static:10M rate=60r/s;
location / {
limit_req zone=static burst=180;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
limit_req zone=dynamic burst=5;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
set $fsn /index.php;
if (-f $document_root$fastcgi_script_name){
set $fsn $fastcgi_script_name;
}
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fsn;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fsn;
}
它显然是到达正确的位置,因为它传递到后端,但似乎没有使用limit_req。我在文档中找不到任何讨论此限制的内容。有没有人有任何想法?
编辑:使用zone = static注释掉第一个允许php处理一个工作。对我来说,这看起来像是limit_req中的一个错误。
答案 0 :(得分:0)
看起来这只是NGINX和limit_req模块的工作方式......也许将来它会变得更好。
经过大量的挖掘后,我发现了一个关于这个http://forum.nginx.org/read.php?2,223426,223431的nginx论坛帖子,看来下面的一个或两个都是真的(我没有兴趣深入研究这个)。
到目前为止,我的配置解决方案是从/中删除limit_req并为静态文件设置新的位置正则表达式匹配,并在那里输入limit_req以获取静态数据。