Пришел работать в хостинговую компанию. Там узнал о существовании Nginx, о том, как его применяют для обработки статики и проксирования запросов на обработку динамики в сторону Apache. Все выглядело красиво и удобно до тех пор, пока пользователи не стали жаловаться на постоянно возникающие 502 и 504 ошибки. Если поковыряться с настройками таймаутов и т.п., проблему в большинстве случаев можно было решить. Но практика выявила два очень неприятных момента:
- PF на FreeBSD периодически резал http пакеты между Apache и Nginx, когда в заголовках была информация о cookies CMS BITRIX`а. Не люблю эту CMS, но заказчик достал со своими 504 ошибками. Решить удалось только отключением PF.
- Проблема с client-side streaming: при отправке chunked запроса получаем "HTTP
411 length required". На оф.сайте было написано, что ошибка исправлена в версии 0.7, но на нее переходить никто не хотел, т.к. Beta.
Ставим 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"
}
Код: Выделить всё
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
На данный момент это все, о чем я хотел написать. Если есть вопросы – задавайте. С удовольствием приму критику и любые комментарии.