LXF125:Lighttpd

Материал из Linuxformat.

Перейти к: навигация, поиск

Содержание

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

Lighttpd – быстрая и легкая альтернатива Apache, нацеленная на сайты с большим трафиком. Джульетта Кемп покажет, что настроить его – раз плюнуть.

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

Как обычно, если вы желаете иметь самую свежую версию (1.4.24), загрузите исходные тексты с сайта проекта (http://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, и перед вам предстанет базовая страница-заглушка (вид ее зависит от выбранного пакета). Базовая стандартная настройка, создаваемая при установке, выглядит как-то так:

Меняем порт

Желаете протестировать 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.

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

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

Параметр 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

PHP и FastCGI

Сейчас ваш web-сервер работает только со статическим содержимым – и для этого Lighttpd особенно хорош. Есть даже крупные сайты, которые применяют его для своего статического содержимого, а для динамического берут альтернативу, потому что обслуживание статичных файлов куда проще. Однако Lighttpd отлично справляется и с динамическим содержимым, особенно по протоколу FastCGI, который предоставляет интерфейс между вашим web-сервером и внешними приложениями – он очень похож на CGI, но лучше масштабируется. FastCGI не зависит от платформы, поэтому любое FastCGI-приложение, уже установленное и настроенное в Apache или другом web-сервере, прекрасно заработает и в Lighttpd. FastCGI предназначен для борьбы с рядом ограничений производительности CGI, а 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…)

Настройка SSL

Другой полезной настройкой web-сервера является SSL, с целью доставки защищенных страниц по https://ссылка. В стандартном для 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, и вы сможете подключаться к вашему серверу по https://адрес.

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

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

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

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

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

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

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

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

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

Lighttpd прекрасно поддерживает виртуальные серверы на базе URL, используемого для доступа к странице. Вы задаете выражение-условие в файле настроек, а Lighttpd определяет по нему, какое содержимое следует обрабатывать (и как его представлять). Вот пример настройки для создания виртуального хоста http://www.myothersite.net (чтобы все работало, необходимо, естественно, также иметь зарегистрированный и настроенный домен в DNS):

$HTTP[“host”] == “www.myothersite.net” {
  server.document-root = “/var/www/myothersite/”
  $HTTP[“url”] =~ “^/usefulscripts/” {
    dir-listing.activate = “enable”
  }
}

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

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию