在LAMP堆栈上,如何限制并发连接数并为超出该限制的用户提供静态页面?

3

我知道Apache指令MaxClientsListenBacklog。我想要设置一个限制,比如说100个并发连接,之后新的连接将会被提供一个静态页面。 这样做可行吗?MaxClients和ListenBacklog应该高于还是低于这个限制?我该如何测试它?


1
好问题,不过你在serverfault.com上可能会有更好的运气。 - andrewtweber
2个回答

1
这是我实现的方法: 假设我想允许X个并发请求,之后的Y个并发请求将留在队列中等待前面X个请求完成,超过X+Y的请求将被提供一个静态页面。
  1. httpd.conf 中必须设置以下指令:

    MaxClients X
    ServerLimit X
    ListenBacklog Y
    
  2. 以 root 身份登录 MySQL,设置 max_connections

    set global max_connections = X
    
  3. 编辑位于服务器公共根目录下的 .htaccess 文件:

    ErrorDocument 503 error_503.html
    
  4. 确保您的 error_503.html 在一个请求中被服务。所有样式表和脚本都必须在此文件中。如果要包含图像,则必须使用 data uri scheme。此外,您还需要将图像切成小块,因为在 IE 中,数据 URI 必须小于 32KiB。


1
如果您想将nginx放在apache的前面,可以尝试使用这个nginx模块https://github.com/cfsego/nginx-limit-upstream。它限制了连接到apache的数量,并将其他连接放入队列中。虽然不完全符合您的要求,但我认为可以修改该模块以呈现静态页面而不是放入队列中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接