Я хорошо знаю, что ngix намного лучше подходит для статического контента, но я не могу его использовать. В противном случае у меня будет полный доступ к моему серверу (VPS).
Я нашел множество статей и сообщений об оптимизации apache, но это всегда касается производительности приложений PHP.
Я использую последнюю версию Apache 2.4.7
Я уже использую MPM. Я думал о настройке KeepAlive MaxClients и т.д. для (статического содержимого) производительности, если это имеет смысл?
Прежде чем пытаться настроить Apache, убедитесь, что у вас есть надлежащий мониторинг, чтобы вы могли видеть, сколько запросов обслуживает Apache и как системные ресурсы соотносятся друг с другом. Простое в использовании решение для этого - Мунин.
Затем подготовьте нагрузочные тесты, с помощью которых вы можете подвергнуть свою систему нагрузке, чтобы увидеть, какой эффект имеют различные параметры настройки. Для этого есть несколько решений, начиная от очень простых ab над JMeter до очень сложных облачных решений, с помощью которых вы можете моделировать тысячи посетителей со всего мира. Выполните поиск по запросу «нагрузочное тестирование веб-сайта», и вы найдете множество решений.
Наконец, вот моменты, которые я считаю важными при настройке Apache:
Удалите неиспользуемые модули: используйте apache2ctl -M
чтобы увидеть, какие модули загружены. Модули, отмеченные (shared)
следует удалить, если они не нужны. Это уменьшит объем памяти, занимаемый Apache, и позволит вашей ОС использовать доступную оперативную память для других целей (например, для кэширования).
Не использовать .htaccess
файлы: поместите все свои настройки в конфигурацию Apache и установите AllowOverride None
поэтому Apache не нужно искать .htaccess
файлы и анализировать их во время обслуживания запросов.
Явно разрешите символические ссылки: установив Options +FollowSymLinks -SymLinksIfOwnerMatch
вы сообщаете Apache, что символические ссылки разрешены, поэтому он может бесплатно обслуживать файлы, которые он читает, без необходимости проверять, являются ли они символическими ссылками. Это экономит некоторые системные вызовы.
В зависимости от ваших потребностей в мониторинге рассмотрите возможность отключения ExtendedStatus
: Это сэкономит некоторые системные вызовы, но даст меньше информации для мониторинга. Не уверен, действительно ли оно того стоит.
Избегайте чрезмерного ведения журнала: ведение журнала каждого запроса может вызвать довольно много операций ввода-вывода. Используя выборочное ведение журнала, вы можете контролировать, какие запросы вы хотите регистрировать. Следующее будет регистрировать только запросы к URL-адресам, заканчивающимся на .html:
SetEnvIf Request_URI ".html$" dolog
CustomLog /var/log/apache2/access.log combined env=dolog
Если вам не нужен SSL, рассмотрите возможность использования Event MPM, он заставляет открытые соединения (например, из-за сообщений поддержки активности) обрабатываться намного более эффективно. Если вам нужен SSL, Event MPM работает так же, как Worker MPM. Видеть Как выбрать, какой Apache MPM использовать? для получения дополнительной информации о различных модулях MPM.
Сжатие или даже предварительное сжатие данных: при использовании mod_deflate содержимое сжимается перед отправкой клиентам. Поскольку у вас есть статические данные, возможно, стоит предварительно сжать содержимое, а не сжимать одни и те же данные снова и снова. Видеть http://httpd.apache.org/docs/2.4/mod/mod_deflate.html#precompressed о том, как этого добиться.
Настройте ОС: используйте большие буферы записи TCP, чтобы меньше системных вызовов требовалось для отправки запрошенных данных клиентам. Также убедитесь, что максимальное количество открытых файлов достаточно велико, чтобы Apache не превышал это ограничение.
KeepAlive обычно имеет смысл, требует больше памяти, но снижает количество подключений, использование ЦП и накладные расходы на подключения. Вместо этого нужно настроить MaxClients и другие вещи на вашу ситуацию. Обычно вы хотите, чтобы у Apache было несколько простаивающих экземпляров, достаточно больших, чтобы обслуживать всех ваших пользователей, не создавая постоянно новые дочерние процессы; в то же время вы хотите избегать чрезмерных значений для maxclients, чтобы держать использование памяти под контролем. Однако, если у вас нет внезапных всплесков использования, настройки Apache по умолчанию обычно подходят и автоматически адаптируются к вашей среде.
Если вы обслуживаете контент через https и, поскольку вы не используете php, вы можете также попробовать модуль mod_spdy, многие браузеры уже поддерживают его (ожидая глобальной поддержки http 2.0).
Наконец, еще один вариант - использовать кеширование / предварительное кэширование. В этом отношении некоторые функции уже доступны в Apache благодаря нескольким модулям (см. http://httpd.apache.org/docs/2.4/caching.html ), или вы можете поставить что-то еще перед сервером (Varnish - популярный вариант).