Lighttpd and speed limits
Надо сделать ограничения по скорости отдачи файлов. Да и в принципе саму отдачу.
Дело было под Debian etch.
Для того, чтобы отдать файл средствами php, например, надо сделать
[cc lang="php"]
[/cc]
А теперь отдайте так файл 100 пользователям. Даже lighttpd+php(fastcgi) просядет. Из-за PHP.
Но если работа lighttpd - отдавать статические файлы, то почему же ее не переложить на него? Однако, не хочется давать прямую ссылку.
Именно для этого есть специальный заголовок: X-Sendfile
[cc lang="php"]
[/cc]
В конфиге надо включить для 1.4 для fastcgi (в описании fastcgi-сервера):
[cc lang="perl"]
allow-x-sendfile = "enable"
[/cc]
А для 1.5 fastcgi уже реализован через mod_proxy_core, соответственно
[cc lang="perl"]
proxy-core.allow-x-sendfile = "enable"
[/cc]
Проверьте отдачу. Разница налицо.
Далее, стоял вопрос в контроле скорости отдачи.
Если правила для всего сервера одинаковы, то можно прописать в конфиге
[cc lang="perl"]
connection.kbytes-per-second = 1000
[/cc]
или суммарную для всего сервера:
[cc lang="perl"]
server.kbytes-per-second = 1000
[/cc]
Но если надо из скрипта управлять скоростью?
Делается вот таким образом:
[cc lang="php"]
[/cc]
Однако ограничение скорости не работает. Во всем виноват mod_speed, точнее его отсутствие среди исходников.
Вот исходник модуля.
Итак, скачиваем его в папку src к остальным исходникам lighttpd, в src/Makefile.am добавляем:
[cc lang="bash"]
lib_LTLIBRARIES += mod_speed.la
mod_speed_la_SOURCES = mod_speed.c
mod_speed_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
mod_speed_la_LIBADD = $(common_libadd)
[/cc]
Желательно это сделать до выполнения autogen.sh. Или же запустить
[cc lang="bash"]
./configure --enable-maintainer-mode
[/cc]
и потом в конфиге дописать в загрузке модулей mod_speed.
ПРИМЕЧАНИЯ
В 1.5 появилась возможность обработки X-Sendfile из бэкэнда у proxy_core. В версии 1.4 эта возможность была в модуле mod_fastcgi и от бэкэнда-апача, например, заголовок такой поймать было нельзя.
В версии 1.5 есть возможность выбирать backend для отдачи файлов. Посмотреть на сравнение можно тут. А установить нужный можно так:
[cc lang="perl"]
server.network-backend = "gthread-aio"
[/cc]
Также у меня возникал вопрос, а как можно сделать простую обработку входящих параметров на некоем встроенном языке? Для примера, у nginx есть встроенный perl-овый модуль, при помощи которого можно реализовать мини-логику прямо на вэб-сервере. В lighttpd такая возможность нашлась - mod_magnet и в качестве обработчика скрипт на LUA. Ну что ж, будет повод освоить LUA.