Статья о настройке Lighttpd в качестве Front-End к Apache

Обсуждаем сайт и форум.

Модератор: f0s

Аватара пользователя
Truewar-6.5.88
ефрейтор
Сообщения: 55
Зарегистрирован: 2007-07-31 7:35:18
Откуда: Монголия Булган
Контактная информация:

Статья о настройке Lighttpd в качестве Front-End к Apache

Непрочитанное сообщение Truewar-6.5.88 » 2008-12-25 11:49:47

Lighttpd as FrontEnd to Apache


Пришел работать в хостинговую компанию. Там узнал о существовании Nginx, о том, как его применяют для обработки статики и проксирования запросов на обработку динамики в сторону Apache. Все выглядело красиво и удобно до тех пор, пока пользователи не стали жаловаться на постоянно возникающие 502 и 504 ошибки. Если поковыряться с настройками таймаутов и т.п., проблему в большинстве случаев можно было решить. Но практика выявила два очень неприятных момента:
  1. PF на FreeBSD периодически резал http пакеты между Apache и Nginx, когда в заголовках была информация о cookies CMS BITRIX`а. Не люблю эту CMS, но заказчик достал со своими 504 ошибками. Решить удалось только отключением PF.
  2. Проблема с client-side streaming: при отправке chunked запроса получаем "HTTP
    411 length required". На оф.сайте было написано, что ошибка исправлена в версии 0.7, но на нее переходить никто не хотел, т.к. Beta.
Для себя я решил от nginx отказаться. Но уж больно технология Front-End и Back-End для хостинга зацепила. А тут как раз довелось сервер настраивать и решил я попробовать заменить nginx на Lighttpd (лайти). Привлекла легкость (около 600кб в исходниках), далеко не слабые возможности, а также отзывы админов. Но статей по настройке подобной связки не нашел. Был вариант, когда все обрабатывал apache, но запросы на статику он передавал Lighttpd. Но это, на мой взгляд, некорректно: мы же лайти ставим, чтоб апач разгрузить, а тут на него проксирование вешают. Ну что ж, начнем...

Ставим LIGHTTPD из портов:

Код: Выделить всё

cd /usr/ports/www/lighttpd && make install clean
Кофе налить не успеете, так что не спешите вставать со стула =)
В окошке конфигурирования я лишь галочку для BZ2 (а куда без него =)))))

После установки правим конфиг:

Код: Выделить всё

vi /usr/local/etc/lighttpd.conf

Код: Выделить всё


#из модулей только прокси и сжатие данных. Возможные варианты есть в конфиге по-умолчанию.
server.modules = (
“mod_compress”,
"mod_proxy"
)

server.document-root = "/usr/local/www/" #корневая директория 
server.errorlog = "/var/log/lighttpd.error.log" #лог файл ошибок
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm" ) #индексные странички
# Некий обработчик событий. Обчно по поводу него не парится никто. 
# И вообще он помечен как needed on OS X. Так что я просто его не трогал.
server.event-handler = "freebsd-kqueue" 
# Mime типы. Я их оставил как были.
mimetype.assign = (
".pdf" => "application/pdf",
".sig" => "application/pgp-signature",
".spl" => "application/futuresplash",
".class" => "application/octet-stream",
".ps" => "application/postscript",
".torrent" => "application/x-bittorrent",
".dvi" => "application/x-dvi",
".gz" => "application/x-gzip",
".pac" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".tar.gz" => "application/x-tgz",
".tgz" => "application/x-tgz",
".tar" => "application/x-tar",
".zip" => "application/zip",
".mp3" => "audio/mpeg",
".m3u" => "audio/x-mpegurl",
".wma" => "audio/x-ms-wma",
".wax" => "audio/x-ms-wax",
".ogg" => "application/ogg",
".wav" => "audio/x-wav",
".gif" => "image/gif",
".jar" => "application/x-java-archive",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".xbm" => "image/x-xbitmap",
".xpm" => "image/x-xpixmap",
".xwd" => "image/x-xwindowdump",
".css" => "text/css",
".html" => "text/html",
".htm" => "text/html",
".js" => "text/javascript",
".asc" => "text/plain",
".c" => "text/plain",
".cpp" => "text/plain",
".log" => "text/plain",
".conf" => "text/plain",
".text" => "text/plain",
".txt" => "text/plain",
".dtd" => "text/xml",
".xml" => "text/xml",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".avi" => "video/x-msvideo",
".asf" => "video/x-ms-asf",
".asx" => "video/x-ms-asf",
".wmv" => "video/x-ms-wmv",
".bz2" => "application/x-bzip",
".tbz" => "application/x-bzip-compressed-tar",
".tar.bz2" => "application/x-bzip-compressed-tar",
# default mime type
"" => "application/octet-stream",
)

#указываем, где хранить кэш сжатых данных
compress.cache-dir = "/var/www/cache/" 
# и какие файлы сжимать (см. Mime-типы)
compress.filetype           = ("text/plain", "text/html", "text/css", "image/png", "image/jpeg", "image/gif",  "text/xml","text/javascript")

# Путь к access логу.
accesslog.filename = "/var/log/lighttpd.access.log"
# Путь к файлу процесса.
server.pid-file = "/var/run/lighttpd.pid"
# Имя и группа от которого работает сервер
server.username = "www"
server.groupname = "www"
#А теперь настраиваем виртуальный хост
$HTTP["host"] == "mysite.ru" {
#указываем, где хранить кэш сжатых данных для данного виртуального хоста
compress.cache-dir = "/var/www/cache/mysite.ru/"

$HTTP["url"] !~ "\.(css|html|jpg|gif|png|js|zip|bzip|gz|rar)$" { #перечисляем расширения файлов, которые должен обрабатывать лайти
url.access-deny = ( "" ) #Запрещаем отдавать все остальное
# А теперь проксируем все на апач, запущенный на IP 127.0.0.1, слушающий 80 порт
proxy.server = ( 
"" => (
"mysite.ru" => (
"host" => "127.0.0.1",
"port" => 80
)
)
)
}
#Путь к корню сайта
server.document-root = "/usr/home/www/site.ru/htdocs/"
#Путь к access логу сайта
accesslog.filename = "/usr/home/www/site.ru/logs/light.access.log"
#Путь к error логу сайта
server.errorlog = "/usr/home/www/site.ru/logs/light.error.log"
}

Сохраняем файл. Добавляем запись в rc.conf:

Код: Выделить всё

echo 'lighttpd_enable=”YES”' >> /etc/rc.conf
Создаем файлы логов и задаем им владельцев:

Код: Выделить всё

touch /usr/home/www/site.ru/logs/light.access.log && chown www:wheel /usr/home/www/site.ru/logs/light.access.log
touch /usr/home/www/site.ru/logs/light.error.log && chown www:wheel /usr/home/www/site.ru/logs/light.error.log
touch /var/log/lighttpd.access.log && chown www:wheel  /var/log/lighttpd.access.log
touch /var/log/lighttpd.error.log && chown www:wheel  /var/log/lighttpd.error.log 
В моем случае сайт уже был установлен в свою директорию, а также апач работал, как сказано выше. Поэтому после

Код: Выделить всё

/usr/local/etc/rc.d/lighttpd start
Сервис запустился и сайт заработал.

Заходим на сайт через браузер и проверяем логи:

Код: Выделить всё

#cat /usr/home/www/site.ru/logs/light.access.log

x.x.x.x y.y.y.y - [25/Dec/2008:10:37:43 +0300] "GET /icons/main/title_tools.gif HTTP/1.0" 200 1691 "http://y.y.y.y/default/adminstyles.css?1221233203" "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.0.5) Gecko/2008122022 Firefox/3.0.5"
x.x.x.x y.y.y.y - [25/Dec/2008:10:37:43 +0300] "GET /icons/main/title_update.gif HTTP/1.0" 200 1638 "http://y.y.y.y/default/adminstyles.css?1221233203" "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.0.5) Gecko/2008122022 Firefox/3.0.5"
x.x.x.x y.y.y.y - [25/Dec/2008:10:37:43 +0300] "GET /images/footerbg.gif HTTP/1.0" 200 200 "http://y.y.y.y/default/adminstyles.css?1221233203" "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.0.5) Gecko/2008122022 Firefox/3.0.5"
x.x.x.x y.y.y.y - [25/Dec/2008:10:39:10 +0300] "GET /index.php HTTP/1.0" 200 9262 "-" "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.0.5) Gecko/2008122022 Firefox/3.0.5"
Видим, что картинки и стили обрабатывает лайти.

Код: Выделить всё

#cat /usr/home/www/site.ru/logs/apache.access.log

x.x.x.x - - [25/Dec/2008:11:00:53 +0300] "GET / HTTP/1.0" 200 9172
x.x.x.x - - [25/Dec/2008:11:02:27 +0300] "GET /site_content/ HTTP/1.0" 301 247
Видим, что скрипты и (только их) обрабатывает апач. Я настоятельно рекомендую почитать о возможностях лайти. Если Вы организовываете хостинг для своих сайтов, то вполне можно обойтись этим веб-сервером. Потребность mod_rewrite и пары других модулей, можно решить с помощью средств lighttpd. Если настраиваете хостинг для коммерческого использования, то без апача уже вряд ли обойдетесь: вот начнут клиенты кричать, что им тот же rewrite нужен и все)))

На данный момент это все, о чем я хотел написать. Если есть вопросы – задавайте. С удовольствием приму критику и любые комментарии.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

fr33man
сержант
Сообщения: 218
Зарегистрирован: 2006-09-04 17:41:27
Откуда: Москва
Контактная информация:

Re: Статья о настройке Lighttpd в качестве Front-End к Apache

Непрочитанное сообщение fr33man » 2008-12-27 21:27:37

Спасибо за статью. Очень понравился материал и стиль изложения. Пиши еще))

+много
WBR Озеров Василий aka fr33man

Аватара пользователя
~>cerber<~
мл. сержант
Сообщения: 112
Зарегистрирован: 2007-06-23 0:58:32
Откуда: [UKRAINE]
Контактная информация:

Re: Статья о настройке Lighttpd в качестве Front-End к Apache

Непрочитанное сообщение ~>cerber<~ » 2008-12-28 0:29:15

Truewar-6.5.88, расскажи как вы на хостинге обрабатываете с помощью light-y чпу-урлы?

Код: Выделить всё

$HTTP["url"] !~ "\.(css|html|jpg|gif|png|js|zip|bzip|gz|rar)$"
по схеме

Код: Выделить всё

http://site/2008/12/12/1.html
на которую должен среагировать mod_rewrite apache light-y вернет 404
;aka coolchevy
live free or die;

Аватара пользователя
Truewar-6.5.88
ефрейтор
Сообщения: 55
Зарегистрирован: 2007-07-31 7:35:18
Откуда: Монголия Булган
Контактная информация:

Re: Статья о настройке Lighttpd в качестве Front-End к Apache

Непрочитанное сообщение Truewar-6.5.88 » 2008-12-29 10:36:46

Это конечно косяк. =) Он и с nginx был косяком.

За то, если сделать так:

Код: Выделить всё

http://www.allbaits.ru/shop/UID_1208.html/
То все работает =)
Для пользователей, которых это не устраивает (а такой только один был пока), можно файлы с расширением .html не обрабатывать с помощью лайти. Кроме того, если человек использует mod_rewrite, скорее всего у него статических html`ок то и нет. А если и есть, то пускай их апач обработает - не страшно: все равно лайти конкретно снизит нагрузку на сервер за счет других пользователей.
Если я скажу что-то, что можно понимать двояко и один из вариантов беспокоит Вас - я имел в виду другой.

Аватара пользователя
~>cerber<~
мл. сержант
Сообщения: 112
Зарегистрирован: 2007-06-23 0:58:32
Откуда: [UKRAINE]
Контактная информация:

Re: Статья о настройке Lighttpd в качестве Front-End к Apache

Непрочитанное сообщение ~>cerber<~ » 2008-12-29 13:30:50

видно у вас совсем маленький опыт работы на хостинге, сейчас чпу-урлы самые популярные среди всех программистов, есть люди,которые медиа-контент привязывают к чпу, тот же css,java, и вот тогда уже действительно весело

имхо; на пока lighthttpd,nginx супер на спец проектах, например очень удобно у кого vps, там люди сами заинтересованы в минимальной нагрузке
;aka coolchevy
live free or die;

Аватара пользователя
Truewar-6.5.88
ефрейтор
Сообщения: 55
Зарегистрирован: 2007-07-31 7:35:18
Откуда: Монголия Булган
Контактная информация:

Re: Статья о настройке Lighttpd в качестве Front-End к Apache

Непрочитанное сообщение Truewar-6.5.88 » 2008-12-29 13:45:21

Опыт чуть меньше года. За это время пользователь, кого такой расклад не устраивает, был только один. Его пустили в обход nginx.

Смысл статьи не в том, чтобы определить, где применять решение, а в том, как его реализовать.
Если я скажу что-то, что можно понимать двояко и один из вариантов беспокоит Вас - я имел в виду другой.