Лайти (Lighttpd)

Опубликовано

Написано по мотивам вот этой статьи, в отличии от которой все здесь описанное реально работает. Читая этот блог (по основному адресу) Вы можете в этом убедиться лично.Ставится это все на VDS под управлением VDSmanager, заказать такой можно у FirstVDS.Ru, ISPserver.com или MiniVDS.com, используется дисковый шаблон "ОС FreeBSD 6.x и самое современное ПО", именуемый в VDSmanager как Soft2006.

В качестве web-сервера был выбран лайти (да-да, именно так это lighttpd произносится). Почему не nginx? От него я отказался после того как стал устанавливать себе rTorrent и мне вдруг понадобился SCGI, которого у nginx не оказалось, кроме того хотелось отказаться от второго (пусть и маленького) http-сервера mini_httpd, используемого для запуска скрипта на perl, т.к. CGI у nginx тоже нет. Собственно лирика закончена, переходим к установке.Лайти ставим из портов

# cd /usr/ports/www/lighttpd# make install clean

в опциях нужно убрать IPv6, на VDS его все равно нет, остальное по желанию, я себе включил SSL, BZIP2, MEMCACHE и WebDAV.Для установки php-fpm берем фрибсдшный порт для версии php-5.2.6 отсюда. В отличии от способа описанного моим коллегой тут, при сборке этого порта rc-скрипт складывается в нужное место (/usr/local/etc/rc.d) и отсутствует описанный мной

глюк. Устанавливаем

# tar -xvf php5_fpm_526.tar.gz -C /usr/ports/lang/# cd /usr/ports/lang/php5-fpm# make

На этом этапе у нас есть два пути:

  1. Воспользоваться советом моего коллеги и не перезаписывать темплейтные файлы, а просто скопировать бинарник, стартовый скрипт и конфиг на свои места
  2. Установить поверх шаблона, сказав make install

Я выбрал второе, т.к. php у меня уже давно не из шаблона :) .Предположим что нам нужно хостить двух юзеров (user1 и user2) с их сайтами, которым необходим php. Для начала создадим всех необходимых пользователей и сайты через панель управления ISPmanager. Зачем? Да очень просто, чтобы в случае чего можно было вернуть все как было отказавшись от lighttpd+php-fpm.Выполняем настройку php-fpm

# cd /usr/local/etc# cp php-fpm.conf.dist php-fpm.conf# vi php-fpm.conf

Нужно создать два пула обработчиков - по одному для каждого юзера, вглядеть это будет примерно так

<section name="pool"><value name="name">user1</value><value name="listen_address">/home/user1/data/sockets/php.sock</value><value name="listen_options"><value name="backlog">-1</value><value name="owner">user1</value><value name="group">www</value><value name="mode">0660</value></value><value name="php_defines"><value name="open_basedir">/home/user1/data:.</value><value name="upload_tmp_dir">/home/user1/data/tmp</value><value name="session.save_path">/home/user1/data/tmp</value><value name="error_log">/home/user1/data/logs/user1.ru.error.log</value></value><value name="user">user1</value><value name="group">user1</value><value name="pm"><value name="style">static</value><value name="max_children">1</value><value name="apache_like"><value name="StartServers">20</value><value name="MinSpareServers">5</value><value name="MaxSpareServers">35</value></value></value><value name="request_execution_timeout">31s</value><value name="rlimit_files">1024</value><value name="rlimit_core">unlimited</value><value name="chroot"></value><value name="chdir"></value><value name="catch_workers_output">yes</value><value name="max_requests">500</value><value name="allowed_clients">localhost</value><value name="environment"><value name="HOSTNAME">$HOSTNAME</value><value name="PATH">/usr/local/bin:/usr/bin:/bin</value><value name="TMP">/tmp</value><value name="TMPDIR">/tmp</value><value name="TEMP">/tmp</value><value name="OSTYPE">$OSTYPE</value><value name="MACHTYPE">$MACHTYPE</value><value name="MALLOC_CHECK_">2</value></value></section>

Аналогично для второго юзера. Не забываем создать каждому пользователю директорию под сокет через который будем подключаться

# mkdir /home/user1/data/sockets# chown user1:www /home/user1/data/sockets# chmod 770 /home/user1/data/sockets

Теперь настроим лайти

# cp lighttpd.conf.sample lighttpd.conf# vi lighttpd.conf

Нужно описать все виртуальные хосты пользователей примерно вот так

$HTTP["host"] =~ "(^|\.)user1\.ru$" {server.document-root = "/home/user1/data/www/user1.ru"server.errorlog = "/home/user1/data/logs/user1.error.log"accesslog.filename = "/home/user1/data/logs/user1.ru.access.log"# Следующая строчка нужна для работы пермалинков в Wordpressserver.error-handler-404 = "/index.php?error=404"fastcgi.server = ( ".php" =>(( "socket" => "/home/user1/data/sockets/php.sock","bin-copy-environment" => ("HOSTNAME", "PATH", "TMP", "TMPDIR", "TEMP", "OSTYPE", "MACHTYPE", "MALLOC_CHECK_" ),"broken-scriptfilename" => "enable")))}

Если пользователю надо CGI - тоже не проблема

$HTTP["url"] =~ "^/cgi-bin" {cgi.assign = ( ".pl" => "",".cgi" => "")}

Аналогично для всех остальных. Все, можно пробовать.

# apachectl stop# /usr/local/etc/rc.d/php-fpm forcestart# /usr/local/etc/rc.d/lighttpd forcestart

Если работает - мои поздравления и последние штрихи

# vi /etc/rc.confapache22_enable="NO"lighttpd_enable="YES"php_fpm_enable="YES"

Если нет - проверяем что все сделано правильно или добро пожаловать сюда и сюда. Или если уже совсем ничего не помогает

# vi /etc/rc.confapache22_enable="YES"

Напоследок об оптимизаторе eAccellerator, который везде советуют. Скажу сразу, я никакие оптимизаторы не использую не те у меня нагрузки, но если opcode cacher Вам все-таки нужен берите xcache (в потрах /usr/ports/www/xcache), его и eAccellerator я для теста включал у себя. Так вот при использовании xcache php в корки не валится, а с конкурентом очень даже. Других отличий не заметил. Вот теперь точно все.Комментарии и конструктивная критика приветсвуются.