Показаны сообщения с ярлыком lighttpd. Показать все сообщения
Показаны сообщения с ярлыком lighttpd. Показать все сообщения

пятница, 22 июля 2011 г.

lighttpd на Debian - деактивация поддержки IPv6

Как сторонний эффект включенной поддержки IPv6 - накрасивые логи в стиле:
::ffff:178.77.77.77 - [22/Jul/2011:21:12:08 +0200] "GET /media/js/tools.js HTTP/1.1" 200 8163 "http://www.domain.ru/dedicated/?gclid=xxxxx" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30"


Открываем конфиг:
vim /etc/lighttpd/lighttpd.conf

Комментируем строки:
# include_shell "/usr/share/lighttpd/use-ipv6.pl"

Применяем настройки:
/etc/init.d/lighttpd restart

суббота, 27 ноября 2010 г.

Установка lighttpd на Debian 5 Lenny с поддержкой трансляции flv видео

Ставим lighttpd:
apt-get install -y lighttpd

После установки он автоматически запустится и будет слушать 80й порт:
netstat -lnpt | grep light
tcp6 0 0 :::80 :::* LISTEN 9941/lighttpd

Далее в качестве теста попробуем открыть страничку: http://ip_address_вашего_сервера/, в ответ нас должно поприветствовать веселым "Placeholder page".

Подключаем поддержку flv (более подробно тут):
vi /etc/lighttpd/lighttpd.conf

Ищем внизу файла строку:
# "mod_flv_streaming",
И убираем в ее начале знак комментария.

Также чуть ниже блока server.modules следом за его закрывающейся скобкой добавляем:
flv-streaming.extensions = ( ".flv" )

После этого применяем изменения посредством перезапуска lighttpd:
/etc/init.d/lighttpd restart

Стриминг flv видео посредством lighttpd

Итак, у нас есть готовый видео файл в формате flv: http://phpsuxx.blogspot.com/2010/11/dvd-video-flv-debian-5-linux.html и теперь стоит задача настроить трансляцию этого видео с работающей перемоткой в браузер с поддержкой flash.

Для работоспособности перемотки нужно добавить мета информацию (http://kovyrin.net/2006/10/08/lighttpd-memcoder-flvtool-for-streaming/),
более конкретно, что именно за информацию я пока сказать не могу, не
изучал вопрос настолько хорошо.

Для этого ставим flvtool2:
apt-get install -y flvtool2

Итак, сначала наш файл не содержит никакой мета-информации:
flvtool2 -P outputfile.flv
---
/opt/ssau_film/outputfile.flv:
duration: 723.52
audiosamplerate: 22050
framerate: 25
audiosamplesize: 16
stereo: true
videocodecid: 2
filesize: 40900644
height: 576
audiocodecid: 2
videodatarate: 0
width: 720
...


Далее добавляем метаданные к созданному нами файлику (но лучше, конечно, выдавать результат в другой файл, чтобы не перезаписывать оригинал):
flvtool2 -PU outputfile.flv

Теперь повторно запросим информацию о мета-данных:
flvtool2 -P outputfile.flv
---
/opt/ssau_film/outputfile.flv:
duration: 723.52
hasMetadata: true
hasKeyframes: true
framerate: 25
datasize: 40724054
audiodatarate: 35.1694144965998
audiosamplerate: 22000
cuePoints:
audiosamplesize: 16
hasVideo: true
lasttimestamp: 723.48
videocodecid: 2
canSeekToEnd: false
stereo: true
audiosize: 3484883
lastkeyframetimestamp: 715.32
videosize: 37232469
audiodelay: 0
hasAudio: true
filesize: 40907095
height: 576
keyframes:
filepositions:
- 6727
- 29382
- 40182
- 51024
тут еще очень много циферок
- 40052758
- 40120879
- 40216540
- 40257801
- 40330333
- 40585739
times:
- 0
- 0.08
- 0.12
- 0.16
- 0.2
тут еще много циферок
- 217.6
- 221.6
- 221.64
- 221.68
- 221.72
- 221.76
- 221.8
- 221.84
- 225.52
- 226.96
- 228.16
- 229.56
- 233.28
- 238.32
- 240.88
- 242.16
тут также много-много циферок
- 709.8
- 712.04
- 715.32
videodatarate: 409.50407474982
audiocodecid: 2
metadatacreator: inlet media FLVTool2 v1.0.6 - http://www.inlet-media.de/flvtool2
metadatadate: Sat Nov 27 13:16:56 GMT+0300 2010
width: 720
hasCuePoints: false
...


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

Теперь нужен веб-сервер чтобы все это выдать в браузер. Мы будем использовать lighttpd, вот инструкция по его установке и настройке для трансляции flv видео.

Теперь копируем в папку веб-сервера наш flv файл:
cp /opt/film/outputfile.flv /var/www/

Далее, для проигрывания всей этой радости нам нужен flash (swf) плейер, я предлагаю использовать FLV-Scrubber 3.x, вот его офсайт http://www.topfstedt.de/weblog/?page_id=208

Итак, качаем плейер:
cd /var/www
wget http://topfstedt.de/FLVScrubber3/FLVScrubber.swf

Далее нужно создать html файлик, в который будет встроен флеш плейер, назовем его, допустим, player.html:
<html>
<body>
<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"
width="336"
height="297">
<param name="movie" value="scrubber.swf?file=/movie.flv" />
<param name="quality" value="high" />
<embed src="FLVScrubber.swf?file=/outputfile.flv"
quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash"
width="336"
height="297"></embed>
</object>
</body>
</html>

Далее открываем http://..../player.html и наслаждаемся :) Итого, у меня все отлично заработало (и даже с прокруткой!) на FireFox 3.6, Opera 10, Chrome.

Либо можно поставить JW Player, который по впечатлениям намного круче и аккуратнее.

Скачиваем дистрибутив (нам из него нужны лишь файлы player.swf, swfobject.js, yt.swf и, вроде, jwplayer.js):
cd /var/www
wget http://www.longtailvideo.com/jw/upload/mediaplayer.zip
unzip mediaplayer.zip
mv mediaplayer-5.3/* ./
rm -r mediaplayer-5.3
mkdir swf
mkdir js
mv *.js js
mv *.swf swf

Далее составляем файлик player.html следующего вида:
<html>
<body>
<p id='preview'>
The player will show in this paragraph
</p>
<script type='text/javascript' src='js/swfobject.js'></script>
<script type='text/javascript'>
var s1 = new SWFObject('swf/player.swf','player','400','300','9');
s1.addParam('allowfullscreen','true');
s1.addParam('allowscriptaccess','always');
s1.addVariable('file','http://46.4.187.234/outputfile.flv');
s1.write('preview');
</script>
</body>
</html>

И все выглядит и работает намного круче :) Разве что перемотка не работает :(

Источник: http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12/install-the-jw-player-for-flash-v5

четверг, 18 ноября 2010 г.

Сборка spawn-fcgi 1.6.3 из исходников

Update:
В Debian Squeeze все ок и пересборка не требуется, версия новая:
spawn-fcgi -v
spawn-fcgi v1.6.3 (ipv6) - spawns FastCGI processes
Build-Date: Sep 24 2009 18:52:51

Менеджер процессов, который идет в комплекте с lighttpd в Lenny довольно малофункциональный - он умеет форкать лишь несколько тушек PHP, используя лишь встроенный механизм PHP (PHP_FCGI_CHILDREN), который не особенно надежен. Чтобы добавить поддержку полноценных отдельных процессов (в каждом из которых, в свою очередь может быть несколько тушек самого PHP, посредством выше упомянутого PHP_FCGI_CHILDREN) нужно собрать новый spawn-fcgid из исходников.

Вот данные старого:
spawn-fcgi -v
spawn-fcgi-1.4.19 - spawns fastcgi processes

spawn-fcgi -?
spawn-fcgi v1.4.19 - spawns fastcgi processes

Options:
-f fcgiapp filename of the fcgi-application
-a addr bind to ip address
-p port bind to tcp-port
-s path bind to unix-domain socket
-C childs (PHP only) numbers of childs to spawn (default 5)
-P path name of PID-file for spawed process
-n no fork (for daemontools)
-v show version
-h show this help
(root only)
-c dir chroot to directory
-u user change to user-id
-g group change to group-id


Собираем новый:
cd /usr/src
wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
tar -xf spawn-fcgi-1.6.3.tar.gz
cd spawn-fcgi-1.6.3
./configure --prefix=/opt/spawn-fcgi
make install

Вуаля:
/opt/spawn-fcgi/bin/spawn-fcgi -?
Usage: spawn-fcgi [options] [-- fcgiapp [fcgi app arguments]]

spawn-fcgi v1.6.3 (ipv6) - spawns FastCGI processes

Options:
-f path filename of the fcgi-application (deprecated; ignored if
is given; needs /bin/sh)
-d directory chdir to directory before spawning
-a address bind to IPv4/IPv6 address (defaults to 0.0.0.0)
-p port bind to TCP-port
-s path bind to Unix domain socket
-M mode change Unix domain socket mode
-C children (PHP only) numbers of childs to spawn (default: not setting
the PHP_FCGI_CHILDREN environment variable - PHP defaults to 0)
-F children number of children to fork (default 1)
-P path name of PID-file for spawned process (ignored in no-fork mode)
-n no fork (for daemontools)
-v show version
-?, -h show this help
(root only)
-c directory chroot to directory
-S create socket before chroot() (default is to create the socket
in the chroot)
-u user change to user-id
-g group change to group-id (default: primary group of user if -u
is given)
-U user change Unix domain socket owner to user-id
-G group change Unix domain socket group to group-id

То есть, теперь ключиком -F можно задать число тушек.

Вот пример запуска PHP для работы в режиме FastCGI режиме (-C рекомендуется в районе 2х штук, -F подстраивается в зависимости от количества свободной памяти):
/opt/spawn-fcgi/bin/spawn-fcgi -U www-data -G www-data -p 9001 -F 2 -C 3 -f php-cgi

понедельник, 15 ноября 2010 г.

Как работают встроенный и внешний менеджеры FastCGI процессов в lighttpd

Вот так: http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModFastCGI

Есть ряд фич, которыми отличается внешний менеджер процессов от внутреннего. И какой выбирать - сильно зависит от версии, например, в контексте lighttpd 1.4.19 из дистрибутива Debian Lenny, внутренний явно предпочтительнее, так как внешний просто-напросто не умеет форкать несколько процессов PHP самостоятельно, а полностью полагается в этом вопросе на сам PHP (а частности переменную-среды PHP_FCGI_CHILDREN), что крайне нехорошо. Впрочем, в актуальной версии spawn-fcgi (1.6.3) имеется полноценный процесс-менеджер, который умеет, как форкать процессы сам, так и просить PHP форкнуться, так что юзать его крайне рекомендуется, даже в связке с более старыми версиями lighttpd :)

К слову, обращаю внимание, что упоминаемый в документации lighttpd внешний менеджер процессов по имени spawn-fcgi.lighttpd (src/spawn-fcgi.c) теперь (с версий старше 1.4.23, вот как раз запись в информации о версии lighttpd, где сообщается, что spawn-fcgi окончательно выделен в отдельный проект) отсутствует в архиве lighttpd и является отдельным проектом: http://redmine.lighttpd.net/projects/spawn-fcgi.

Источник: http://redmine.lighttpd.net/wiki/lighttpd/FrequentlyAskedQuestions

воскресенье, 30 мая 2010 г.

lighttpd NOTE: a request for x.jpg timed out after writing x bytes. We waited 360 seconds. If this a problem increase server.max-write-idle

В этой ошибке ничего страшного. Она вызвана тем, что клиент сбросил соединение раньше, чем lighttpd смог отдать ему файлы либо клиент реально имеет ОЧЕНЬ медленный канал и не смог забрать файлы в заданное время.

Подробнее: http://redmine.lighttpd.net/wiki/lighttpd/server.max-write-idleDetails

среда, 25 ноября 2009 г.

Установка Lighttpd с поддержкой PHP на Centos 5

Ставим Лайти

Т.к. Лайти нету в стандартном репо, то подключаем мой любимый Epel:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm


Ставим Лайти и PHP:
yum install -y lighttpd lighttpd-fastcgi php-cli


Добавляем Лайти в автозагрузку:
chkconfig lighttpd on


Запускаем Лайти:
/etc/init.d/lighttpd start


Конфигурируем PHP

Открываем конфиг PHP:
vi /etc/php.ini


И в самый его низ добавляем строки (зачем это нужно, напишу позже):
cgi.fix_pathinfo = 1


Открываем конфиг Лайти:
vi /etc/lighttpd/lighttpd.conf


И раскомментируем строки (убираем везде # в начале):

#fastcgi.server = ( ".php" =>
# ( "localhost" =>
# (
# "socket" => "/var/run/lighttpd/php-fastcgi.socket",
# "bin-path" => "/usr/bin/php-cgi"
# )
# )
# )



А также раскомменчиваем строку:

# "mod_fastcgi",


Рестартим лайти:
/etc/init.d/lighttpd restart


Создаем тестовый файл:
echo "<?PHP phpinfo(); ?>" > /var/www/lighttpd/info.php


Теперь открываем сайт: http://xx.xx.xx.xx/info.php и должны увидеть там большую простыню команд, где среди прочего встречается "Server API CGI/FastCGI "

Основано на мануале: установка и настройка Web-сервера под управлением Lighttpd, с поддержкой PHP5, Mysql на CentOS 5.0

вторник, 1 июля 2008 г.

Lighttpd + WebDAV

Ставим пакеты:
apt-get update
apt-get install -y lighttpd
apt-get install -y lighttpd-mod-webdav

Добавляем в конфиг файл
vi /etc/lighttpd/lighttpd.conf

$HTTP["url"] =~ "^/dav($|/)" {
webdav.activate = "enable" # allow module
webdav.is-readonly = "disable" # enable write
webdav.sqlite-db-name = "/var/run/lighttpd/lighttpd.webdav_lock.db" # access to locaks and metadata database
}

Около блока "server.modules" ищем строку "mod_webdav" и убираем знак диеза слева, если он установлен.

После этого нам требуется создать хотя бы одну папку с доступом по WebDAV. Корнем веб сервера устанавливается папка /var/www, если вас устраивает такое положение, можете её так и оставить, в противном случае можете изменить её местоположение в конфиг файле. После этого создаем папку для WebDAV доступа:
mkdir /var/www/dav
chown www-data:www-data /var/www/dav

Ну и напоследок применяем настройки:
/etc/init.d/lighttpd restart

После это можно каким-нить WebDAV клиентом (я использовал nd) попробовать поиграться с папкой http://ваш_сайт/dav

Я использовал версию (в случае же проблем, обновляемся на более новую):
lighttpd-1.4.13 (ssl) - a light and fast webserver
Build-Date: Apr 15 2008 08:23:10

Играемс:
nd -d http://домен.ru:81/dav/suxx.ics --- удаление файла
nd -p wammu.log http://домен.ru:81/dav/suxx.log -- загружаем файл
nd -m http://домен.ru:81/dav/suxx555.log http://домен.ru:81/dav/suxx.log -- перемещаем файл
nd -v http://домен.ru:81/dav/555suxx.log -- запрос свойств объекта
У меня было выдано:
Status: 0
Last-Modified:
Created:
Size:
Content-Type:
Resource-Type:

Зададим новое свойство:
nd -l http://домен.ru:81/dav/suxx555.log -- блокируем объект
Lock: token="opaquelocktoken:aebb8df4-3321-4604-a8aa-cf69429c2725",
scope="exclusive",
owner-href="",
timeout="Second-600"

nd -u -t opaquelocktoken:aebb8df4-3321-4604-a8aa-cf69429c2725 http://домен.ru:81/dav/suxx555.log -- разлочим объект посредством "ключа", выданного нам при блокировке
nd -k http://домен.ru:81/dav/folder1 -- создаем новую папку

А вот далее интереснее:
nd -e test=12345 http://домен.ru:81/dav/suxx555.log
nd -v http://домен.ru:81/dav/suxx555.log
Name: http://домен.ru:81/dav/suxx555.log
Status: 0
Last-Modified:
Created:
Size:
Content-Type:
Resource-Type:


Как видите, вновь заданное свойство не показывается (хотя в sqlite лайта базе данных оно имеется). Это баг nd / lighttpd или же я туплю ? Попробуем другой WebDAV клиент, пожалуй, это будет cadaver.
nrg@dell:~$ cadaver
dav:!> open http://домен.ru:81/dav
dav:/dav/> propset suxx555.log suxx 777
dav:/dav/> propget suxx555.log suxx
Fetching properties for `suxx555.log':
Value of suxx is: 777


Таки выходит, глюк nd. Ну вот и все, осталось только придумать, для чего использовать такой замечательный протокол :)

Офсайт lighttpd.