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