Назад | Перейти на главную страницу

Как в стеке LAMP ограничить количество одновременных подключений и обслуживать статическую страницу для тех, кто превышает этот предел?

Я знаю директивы Apache MaxClients и ListenBacklog. Я пытаюсь установить предел, скажем, 100 одновременных подключений, после чего новые подключения будут обслуживать статическую страницу. Это можно сделать? Должен MaxClients и ListenBacklog быть выше или ниже этого предела? Как я могу это проверить?

Если Apache не может принять входящее соединение, потому что он уже обрабатывает MaxClients, он не может обслуживать статическую страницу. Итак, у меня нет веских доказательств, но я не понимаю, как вы могли бы добиться этого с помощью одного только Apache. Вы могли бы поместить что-нибудь перед Apache, который возвращает статическую страницу, если Apache возвращает ошибку соединения, но мне это кажется сложной конфигурацией. Надеюсь, кто-нибудь докажет, что я ошибаюсь.

Вот как я это сделал: скажем, я хочу разрешить 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 обслуживается одним запросом. Все таблицы стилей и скрипты должны быть в этом файле. Если вы хотите включить изображения, вам нужно будет использовать схема URI данных. Кроме того, вам придется разрезать свои изображения, потому что в IE URI данных должны быть меньше 32 КБ.