将页面限制为一个同时请求

时间:2013-12-13 13:54:57

标签: php apache http nginx transactions

使用PHP或Apache(我还考虑在必要时转移到Nginx),如何让一个页面一次只运行一次?如果三个请求同时进入,则一个完全完成,然后是下一个,然后是下一个。在任何时候都不应该一次通过多个请求访问页面。

把它想象成交易!我怎样才能做到这一点?它应该是每个服务器一页,没有用户或IP。

2 个答案:

答案 0 :(得分:1)

您想对服务器上的“忙”状态做什么?立即返回错误或保持请求等待上一次完成?

如果您只是希望服务器拒绝客户端的内容,您可以在nginx和apache上执行此操作:

您的请求中的“棘手”部分不是像人们通常想要的那样限制IP,而是根据URI全局限制。我知道应该可以使用mod_security芽我自己没有这样做,但我有这个配置适用于nginx:

http {
    #create a zone by $package id (my internal variable, similar to a vhost)
    limit_req_zone $packageid zone=heavy-stuff:10m rate=1r/s;

}

然后:

server {
  set $packageid some-id;
  location = /some-heavy-stuff {
                limit_req zone=heavy-stuff burst=1 nodelay;
  }
}

它对我的作用是创建N个限制区域,每个服务器一个。然后,该区域用于计算请求,并且每秒只允许1次。

希望有所帮助

答案 1 :(得分:0)

如果同一用户从同一页面发出请求,则使用session_start()这将阻止其他请求,直到完成第一个请求

示例:

http://codingexplained.com/coding/php/solving-concurrent-request-blocking-in-php

如果要阻止来自不同浏览器/客户端的请求,请将条目保留在数据库中并逐个处理。