Популяризация nginx среди нерусскоязычного населения :-)

Eugene my-subscr at mail.ru
Tue Apr 18 15:22:12 MSD 2006


>По-моему вы что-то путаете. В комплекте с lighttpd идет утилита для
>запуска php в режиме fastcgi, которая делает кучу всяких побочных
>полезных действий. В конфиге можно указывать количество запущенных
>процессов и периодичность перезапуска. FCGI сервер стартует при
>запуске системы, стандартными способами, теми же что и остальные
>демоны, и потом работает вроде бы стабильно. Возможные утечки памяти
>ликвидируются при автоматическом перезапуске.
>  
>
Ну так это к lighttpd идет. А нам надо для nginx :)
Есть два варианта использования php в виде FastCGI: с ипользованием 
внешнего менеджера процессов. Как вы описываете.
Аналогично работает mod_fastcgi из apache. Второй вариант - 
использование менеджера встроенного в php. Он сам может отслеживать 
количество процессов, убивать и создавать новые.

В каждом из этих вариантов есть два режима: статический и динамический.
Вы описали статический - при запуске системы (или апача) запускаются 
factcgi сервера и постоянно висят в памяти.
Я ратую как раз за динамический - процесс запускается только в момент 
запроса, потом убивается. На мой взгляд, это идеальный режим работы для 
виртуального хостинга.
Почему?
- каждый сайт обслуживается отдельным процессом или при большой нагрузке 
пулом процессов.
- каждый процесс может работать от своего пользователя со своими правами 
и ограничениями. Так гораздо проще запретить пользователям "лазить" в 
системе и чужих папках - потому, что за этим будет следить не встроенная 
"безопасность" php, а ядро операционной системы, что гораздо быстрее и 
надежнее. Я паталогически не доверяю встроенной безопасности php 
(safe_mode и иже с ним), и недавние ошибки 
(http://www.opennet.ru/opennews/art.shtml?num=7318) только подтверждают 
мой тезис. Я вижу только одно средство для борьбы  с такими дырами - 
разделение на уровне операционной системы.
-при низкой частоте запросов работают один апач и один пхп. Если 
запросов приходит много, то запускаются дополнительные апачи и 
пхп-процессы. Каждого столько сколько нужно. Если у Вас mod_php, то у 
вас запускается монолит apache+mod_php+еще куча всего

>Кроме того, запуск php в режиме FCGI занимает несколько десятков
>секунд, если я не ошибаюсь. 
>
У меня запуск занимает 1 секунду, а перезапуск - 2.

>Поэтому о динамике тут говорить сложно.
>Плюс отдельный пул процессов для каждого сайта довольно сильно
>подрежет преимущества концепции FCGI.
>  
>
Как раз наоборот! Когда запросов мало и они быстро обрабатываются, то 
достаточно одного процесса. Если очередь растет, например, если 
обработка медленная - чтение БД, файловой системы и т.п., когда процесс 
простаивает в ожидании, то как раз выгодно создавать новые процессы для 
уменьшения времени ожидания.
После снижения нагрузки они убиваются.


Евгений





More information about the nginx-ru mailing list