Обслуживаем страницы с Lighttpd

lighttpdLighttpd – быстрая и легкая альтернати ва Apache, нацеленная на сайты с большим трафиком.

Apache сейчас стал стандартным web-сервером для большинства пользователей Linux, и это превосходный продукт. Но для некоторых весьма и весьма быстрых сайтов с высокой загрузкой он может отставать от идеала. Специально для них разработан Lighttpd — сервер, занимающий минимум памяти и работающий на максимуме скорости. Он особенно хорош для обслуживания статического контента, отлично масштабируется на несколько серверов и ладит с FastCGI (вы можете настроить Lighttpd в качестве оболочки для использования массива серверов FastCGI). Кроме того, как мы покажем в данной статье, его легко настроить. Даже если ваш сайт не гонится за скоростью Lighttpd, поработать с ним приятно — он даже настраивается быстрее Apache!

Как обычно, если вы желаете иметь самую свежую версию (1.4.24), загрузите исходные тексты с сайта проекта (www.lighttpd.net). Однако почти всегда лучше будет использовать пакет, имеющийся в дистрибутиве (поскольку это вариант с оптимальной поддержкой для длительного применения). В Debian/Ubuntu пакет называется Lighttpd (в Debian Lenny и Ubuntu 9.04 используется версия 1.4.19, что не очень и далеко от основного релиза проекта); доступен он и в виде RPM.

Если у вас нет другого web-сервера, работающего по порту 80 (см. чуть ниже по тексту, если есть), то стандартные настройки, созданные при установке пакета, позволят вам запустить сервер немедленно командой

/etc/init.d/lighttpd start
. Если на время настройки вы хотите запустить его в режиме отладки (чтобы он находился в терминале и выводил служебные сообщения прямо на экран), скомандуйте
lighttpd -D -f /etc/lighttpd/lighttpd.conf

Перейдите на http://localhost, и перед вам предстанет базовая страница-заглушка (вид ее зависит от выбранного пакета). Базовая стандартная настройка, создаваемая при установке, выглядит как-то так:

# В вашем файле с настройками может быть больше строк, причем в другом порядке: это нормально!
server.modules = (
“mod_access”,
“mod_alias”,
“mod_accesslog”,
“mod_compress”,
)
server.documentroot
= “/var/www/”
server.port = 80
server.errorlog = “/var/log/lighttpd/error.log”
accesslog.filename = “/var/log/lighttpd/access.log”
indexfile.
names = ( “index.php”, “index.html”,
“index.htm”, “default.htm”,
“index.lighttpd.html” )
url.accessdeny
= ( “~”, “.inc” )
staticfile.
excludeextensions
= ( “.php”, “.pl”, “.fcgi” )
include_shell “/usr/share/lighttpd/createmime.
assign.pl”

Здесь все должно быть понятно! Представлено немножко модулей, включенных по умолчанию, настроены журналы (журнал доступа требует строки для модуля mod_accesslog в разделе server.modules), а также настроены имена индексных файлов (тех, которые отображаются при запросе пример.com/кaтaлoг/).

Параметр url.access-deny устанавливает, какие файлы вообще не должны обрабатываться: здесь это лишь файлы с суффиксом ~ (обычно так помечаются резервные копии, и вы вряд ли захотите, чтобы старые данные были доступны из Интернета), а также файлы .inc, являющиеся исходными текстами для генерации динамического содержимого. Заметим, что в данный момент наш web-сервер не работает с динамическим содержимым, поскольку нет подключенных и настроенных модулей; но даже после их настройки вам незачем выкатывать исходные тексты на всеобщее обозрение, поскольку это может вызвать проблемы с безопасностью.

Debian создает MIME-типы при помощи скрипта, который включен (и запускается) в строке include_shell; в других случаях вы можете указать их вручную (добавьте и другие строки, если хотите!):

# Замените строку include_shell этими строками
mimetype.assign = (
“.html” => “text/html”,
“.txt” => “text/plain”,
“.jpg” => “image/jpeg”,
“.png” => “image/png”
)

Чтобы протестировать настройки перед стартом сервера, будет неплохо воспользоваться командой

lighttpd -t -f /etc/lighttpd/lighttpd.conf

Еще одно действие, которое не мешает выполнить заранее — создание пользовательских каталогов. Все просто:

lighty-enable-mod userdir /etc/init.d/lighttpd force-reload

Меняем порт

Желаете протестировать Lighttpd совместно с существующим web- сервером Apache (или другим)? Измените строку server.port в /etc/lighttpd/lighttpd.conf на server.port = 81(начальную страницу придется сохранить в index.lighttpd.html, потому что в каталоге /var/www уже есть index.html от Apache). Кроме того, заметьте, что сервер работает на порту 81. Перезапустите Lighttpd командой

/etc/init.d/lighttpd restart
и проверьте: http://localhost:81.

PHP и FastCGI

Сейчас ваш web-сервер работает только со статическим содержимым — и для этого Lighttpd особенно хорош. Есть даже крупные сайты, которые применяют его для своего статического содержимого, а для динамического берут альтернативу, потому что обслуживание статичных файлов куда проще. Однако Lighttpd отлично справляется и с динамическим содержимым, особенно по протоколу FastCGI, который предоставляет интерфейс между вашим web-сервером и внешними приложениями — он очень похож на CGI, но лучше масштабируется. FastCGI не зависит от платформы, поэтому любое FastCGI-приложение, уже установленное и настроенное в Apache или другом web-сервере, прекрасно заработает и в Lighttpd. FastCGI предназначен для борьбы с рядом ограничений производительности CGI, a Lighttpd улучшает его еще больше, делая внутреннюю нагрузку FastCGI сбалансированной, что увеличивает производительность по сравнению с Apache и mod_php.

Для настройки этого в вашем новом lighttpd-сервере необходим mod_fastcgi. Он должен находиться в /etc/lighttpd/mods-available/. Чтобы подключить его, воспользуйтесь

/usr/sbin/lighty-enable-mod
/etc/init.d/lighttpd force-reload

Скрипт lighty-enable-mod выдаст вам список доступных модулей и спросит, какие из них включить; после этого вы перезапустите сервер, чтобы применить изменения.

Мы рассматриваем запуск FastCGI с PHP (как и CGI, он не зависит от языка, поэтому вы можете использовать Perl или что-то еще). Тогда потребуется также добавить PHP5-CGI, если он у вас уже не установлен (в Debian Lenny и Ubuntu, это пакет php5-cgi).

Для настройки php5-cgi необходимо подправить файл /etc/php5/cgi/php.ini, добавив в его конец следующую строку:

cgi.fix_pathinfo = 1

Перезапустите сервер, и все готово: вы настроили Lighttpd для поддержки PHP через FastCGI! (К сожалению, пока что нет модуля, который писал бы за вас на PHP...)

Переписываем правила

Вам потребуется заново создать правила, которые у вас уже есть в файле .htaccess, поскольку Lighttpd его не использует. Вот пример переписывания правил под Lighttpd:

url.rewrite-once = ( "A/faq/([0-9]+)$" => "/faq.php?id=$1" )

Это преобразует www.examDle.com/faq/71 в www.example.com/faq.php?id=71.

Другой опцией является канонизация расширений файлов:

url.rewrite-once = ( "/(.*)\.htm" => "/$1.html" )

Причем те, кто использует .htm вместо .html, будут перенаправлены по корректному адресу. Чтобы включить перезапись, раскомментируйте строку mod_rewrite в разделе server.modules файла настроек и перезапустите сервер.

Настройка SSL

Другой полезной настройкой web-сервера является SSL, с целью доставки защищенных страниц по ссылка. В стандартном для Debian/Ubuntu Lighttpd SSL включен: желая удостовериться, что это так, выполните

lighttpd -v
и убедитесь, что выводится нечто подобное:
lighttpd-1.4.19 (ssl) — a light and fast webserver
(ssl) здесь главная часть. Затем воспользуйтесь
lighty-enable-mod
, чтобы включить SSL-модуль, как описано выше в разделе о PHP. Вам потребуется исправить файл /etc/lighttpd/sitesavailable/10-ssl.conf, введя корректные параметры сертификата вашего сервера:
$SERVER[“socket”] == “10.0.0.9:443” {
ssl.engine = “enable”
ssl.pemfile = “/etc/lighttpd/www.server.org.pem”
server.name = “www.server.org”
}

Необходимо изменить адрес в верхней строке, а также строки ssl.pemfile и server.name. Затем перезапустите сервер командой

/etc/init.d/lighttpd forcereload
, и вы сможете подключаться к вашему серверу по адрес

Мы не будем здесь описывать настройку SSL-сертификатов сервера, поскольку это выходит за рамки данной статьи — но очевидно, что для работы необходим действительный сертификат в месте, указанном в ssl.pemfile. Для создания сертификата изучите команду openssl.

Настройка виртуального сервера

Lighttpd прекрасно поддерживает виртуальные серверы на базе URL, используемого для доступа к странице. Вы задаете выражение-условие в файле настроек, а Lighttpd определяет по нему, какое содержимое следует обрабатывать (и как его представлять). Вот пример настройки для создания виртуального хоста http://www.myothersite.net (чтобы все работало, необходимо, естественно, также иметь зарегистрированный и настроенный домен в DNS):
$HTTP[“host”] == “www.myothersite.net” {
server.documentroot
= “/var/www/myothersite/”
$HTTP[“url”] =~ “^/usefulscripts/” {
dirlisting.
activate = “enable”
}
}

Если обрабатываемый URL содержит www.myothersite.net, Lighttpd воспользуется настройками внутри этого условия вместо стандартных для сервера. В данном случае, это означает смену корневого каталога сайта (то есть при запросе www.myothersite.net/test.html будет обработан файл /var/www/myothersite/test.html) и такую настройку каталога usefulscripts, чтобы можно было получать список содержимого директории (то есть чтобы запрос www.myothersite.net/usefulscripts/ выдавал перечень файлов в каталоге — изначально, по соображениям безопасности, это отключено). В условной конфигурации можно размещать любые опции и иметь сколько угодно виртуальных хостов.

Комментарии (0) Вконтакте (0) facebook ()

Комментарии (0)

RSS свернуть / развернуть

комментировать

Ваше имя
Ваш e-mail (будет скрыто и используется только для отправки ответов на ваш комментарий)
Вы — гость, и вам запрещено использовать HTML-теги.
 
Введите цифры и буквы: