уменьшение загрузки Apache с помощью Lighttpd

Ваш Apache-сервер все еще загибается под тяжестью потокового мультимедиа-контента? Тогда Lighttpd, любовно называемый в народе «Lighty», идет к вам!

Благодаря тому, что он использует меньше ресурсов для обработки каждого запроса, чем Apache, он может обслуживать весь статический контент быстрее. Также он предоставляет преимущества интерфейса FastCGI, который осуществляет балансировку нагрузки.
Одной из удобных особенностей Lighttpd является то, что его можно запустить «за» Apache с помощью модуля Apache proxy. Это означает, что для его запуска вам не потребуется еще один физический сервер.

установка Lighttpd

Для большинства дистрибутивов можно рекомендовать установку Lighttpd из исходного кода. Это означает, что вам необходимо загрузить их, скомпилировать и установить. Это довольно простой процесс, и у меня все проходило успешно вне зависимости от платформы. Важные команды для компиляции и установки могут быть найдены на домашней странице проекта.
Если вы используете Gentoo или FreeBSD, установка будет еще более простой. В Gentoo просто напишите:

emerge lighttpd

FreeBSD имеет порт Lighttpd в /usr/ports/www/lightpd, который вы можете установить теми же самыми методами, что и для установки других портов (см. раздел 4.5.2 FreeBSD handbook).
После установки Lighttpd вам потребуется создать конфигурационный файл. Дистрибутив Lighttpd содержит пример в папке doc/, который подходит для всех нужд по обработке статического контента. Рассмотрим самые важные аспекты конфигурации.
Если переменная server.document-root не будет задана, Lighttpd будет пытаться работать с /www/pages, что, вероятно, не соответствует конфигурации вашей системы. Поэтому ее необходимо задать:

server.document-root = "/www/pages"


Теперь укажем, куда класть логи (убедитесь, что путь существует, с помощью mkdir -p /var/log/lighttpd):

server.errorlog = "/var/log/lighttpd/error_log"
accesslog.filename = "/var/log/lighttpd/access_log"


Зададим порт:

server.port = 81

(по умолчанию используется 80). Привяжем к локальному хосту (рекомендуется для прокси за Apache):

server.bind = "localhost"

Это не полный листинг конфигурационного файла, а только самые важные опции. Обратите внимание на используемый порт 81. Этим самым мы предотвращаем конфликт с Apache, который слушает порт 80. Если же вы хотите, чтобы Lighttpd обслуживал полностью весь сайт, закомментируйте эту строку или поменяйте значение на 80.

настройка Apache proxy

Для того чтобы сцепка Apache + Lighttpd заработала, вам потребуется запустить модуль Apache Proxy. Далее предполагается, что вы используете Apache 2, но если у вас стоит Apache 1.3, большинство нижеприведенного будет справедливо и для него (однако за полной информацией вам придется обратиться к документации к модулям Apache).
Для начала убедитесь в том, что у вас работает модуль Apache Proxy. Для этого поищите что-то вроде следующих строк в файле httpd.conf:

LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_connect_module libexec/apache2/mod_proxy_connect.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so

Если нет, то добавьте их или же убедитесь, что модуль установлен. В большинстве случаев модуль будет уже там прописан и, возможно,
закомментирован. В последнем случае просто уберите комментирование и перезапустите Apache.
Если вы используете виртуальные хосты, вам понадобится следующий код для установки прокси между директивами. Если же нет, можно схитрить, поместив это в конец httpd.conf:

ProxyRequests Off
ProxyPreserveHost On
ProxyPass /images http://0.0.0.0:81/
ProxyPassReverse / http://0.0.0.0:81/

В данном примере Lighttpd будет обслуживать директорию images, оставляя Apache все остальное. Вы можете заменить это на любую директорию со статическим контентом. Еще одним неплохим применением Lighttpd будет обслуживание мультимедийных файлов.
Прирост производительности, который вы получите, будет зависеть от множества факторов. Если вы доверите Lighttpd только изображения, вряд ли что- то сильно ускорится. Для лучшего результата вы можете возложить на него обязанности по обслуживанию всего статического контента, положив в директорию /static все HTML- и PDF-файлы, изображения, видеоклипы и задав соответствующим образом переменную ProxyPass.

динамический Lighty

Прирост производительности, который даст вам применение Lighttpd, не феноменален, но во многих ситуациях он не будет лишним. Если вы используете тяжелые PHP-скрипты или приложения Ruby on Rails, будет не лишним переложить их на плечи FastCGI Lighttpd, так как его поддержка балансировки нагрузки намного более продвинутая, чем у Apache и может дать существенное ускорение.

Для того чтобы использовать PHP с Lighttpd, убедитесь, что вы скомпилировали PHP с поддержкой FastCGI. Вы можете сделать это с помощью конфигурационного ключа --enable-fastcgi.
Нижеприведенный конфигурационный код поможет вам быстро запускать приложения Ruby on Rails, существенно разгрузив Apache.

fastcgi.server = (
".fcgi" =>
( "localhost" =>
( "socket" =>"/home/path_to_app/var/lighttpd-fcgi.socket",
"bin-path" =>"/home/path_to_app/rails_sites/rails_app_name/public/dispatch.fcgi",
"bin-environment" =>( "RAILS_ENV" =>"production" ),
"min-procs" =>1,
"max-procs" =>1,
"idle-timeout" =>60,
"allow-x-send-file" =>"enable" ) ) )


чем меньше нагрузка на сервер, тем счастливее посетители

Перенеся часть нагрузки с Apache на Lighttpd, вы увеличите производительность вашего веб-сайта, снизите нагрузку на сервер, и сделаете работу клиентов более приятной. Для тяжелых нагрузок, вы можете установить еще один сервер, подключить его к локальной сети и запустить на нем Lighttpd на порту 80. Используя модуль Apache Proxy, вы сможете перенаправлять вывод от локального сервера Lighttpd на «лицевой» сервер с Apache. Я убедился, что Lighttpd может быть весьма полезным в снижении нагрузки и увеличении производительности, особенно в обслуживании приложений PHP и Rails, и надеюсь, что вам он тоже пригодится.



Роберт В. Оливер II, перевод Дмитрия Герусса


Сетевые решения. Статья была опубликована в номере 03 за 2006 год в рубрике sysadmin

©1999-2024 Сетевые решения