From: "Konstantin A. Lepikhov" <lakostis@altlinux.org> To: ALT Linux Devel Mailing List <devel@altlinux.ru> Subject: [devel] как использовать php в режиме FastCGI на всю мощь или долой apache! Date: Thu, 14 Jul 2005 01:52:28 +0400 Message-ID: <20050713215228.GB22719@lks.home> (raw) [-- Attachment #1: Type: text/plain, Size: 4581 bytes --] Hi! Данная заметка лишь для того, чтобы все стали обращать внимание на пакеты, которые есть в Сизифе (или обратили внимание на их необычные свойства). Итак, кажется я уже жаловался в Сизифе на притеснение cgi версии php и о том, что это вполне себе engine для рендеринга. К частью, скоро в Сизиф будет залит новый php с починенным fcgi и все станет намного лучше. Итак, что мы будем делать. Мы будем делать web сервер без apache. Почему? Ну во-первых, он не всегда нужен, а во-вторых он плохо работает с fcgi приложениями (да да, все хаки в sapi/cgi именно для mod_fcgi ;) Кроме того, в Сизифе уже давно есть альтернатива - это nginx. Это просто радость для параноидальных и рукастых hostmaster'ов. Кроме того, оно умеет работать с FastCGI (например с php-cgi c поддержкой fastcgi) или как frontend proxy для медленного backend'а (например httpd-perl). Поехали. Наша цель - nginx + php-cgi + imp (типа будем им читать почту вместо thunderbird ;) Подготовка. ----------- Ждем нового php-cgi или исправляем существующий. Что нужно поправить в существующем: 1) заменить старые CFLAGS на новые вида export CFLAGS="%optflags -DPHP_FASTCGI -DDEBUG_FASTCGI" 2) добавить в configure параметры --enable-discard-path и --enable-force-cgi-redirect. Все это превратит php-cgi в полноценный FastCGI сервер, а не в жалкую перделку для apache. 3) Добавить в php.ini.cgi.alt строку cgi.fix_pathinfo=1. Для чего - см. 2) Ставим nginx Теперь самое веселое - нам нужно самостоятельно чем-то запускать собранный php-cgi. Для этих целей все рекомендуют использовать spawn-fcgi из пакета lighttpd, фиг с ним, будем использовать его. Но тут есть одна трабла - конечно, можно spawn'ить его руками (через .sh обвязку вида spawn-php.sh из того же lighttpd), но это некошерно. Поэтому я маленько подхачил spawn-fcgi, чтобы он умел делать pidfile. Патчик есть тут - http://lakostis.elektrostal.ru/patches/spawn-fcgi.c-pidfile.diff Далее уже дело техники, и вот, у нас есть init.d запускалка fcgi приложений - http://lakostis.elektrostal.ru/src/spawn-fcgi и ее конфигурационный файл http://lakostis.elektrostal.ru/src/spawn-fcgi.sysconfig (кладется в /etc/sysconfig под именем spawn-fcgi). Настройка ---------- - Редактируем php.ini по-вкусу. - Редактируем /etc/sysconfig/spawn-fcgi по-вкусу - Создаем /var/run/spawn-fcgi && service spawn-fcgi start и смотрим, что php-cgi у нас теперь болтается в памяти - Редактируем файл nginx.ini. У меня секция про FastCGI такого вида: ..... location ~* ^.+\.php$ { fastcgi_pass <fcgi host>:<fcgi port>; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/forum$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; # жрет ресурсы, без нужды не использоват fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param REDIRECT_STATUS 200; # специально для php-cgi без этого PHP_SELF пустая fastcgi_param SCRIPT_NAME $fastcgi_script_name; } - Запускаем nginx, проверяем что FastCGI работает (например, через тествую страницу с phpinfo() - Ставим imp, рисуем там ящики и работаем ;) Для него с nginx есть несколько хаков в конфиге: ... root /var/www/html/addon-modules/horde; index index.php; location = / { root /var/www/html/addon-modules/horde/imp; index index.php; } location / { rewrite ^/horde(.*)$ $1 break; rewrite ^/favicon.ico$ /graphics/favicon.ico break; } location ~* \.php { rewrite ^/horde(.*) $1 break; ..... } Заходить на http://..../imp. Заключение ---------- Собвственно оно работает. Даже неплохо. Можно поставить phpa и даже немного ускорить процесс. Из замеченных неприятностей - теперь php лучше лишний раз не дергать (ибо слишком много запросов на порт залипает). workaround - использовать сокет, но это не совсем удобно. т.к придется тогда и nginx под пользвателем fcgi запускать, что несекурно. Зато теперь можно мониторить fcgi через monit или запускать его как все взрослые сервисы через rc.d -- WBR, Konstantin chat with ==>ICQ: 109916175 Lepikhov, speak to ==>JID: lakostis@jabber.org aka L.A. Kostis write to ==>mailto:lakostis@pisem.net.nospam ...The information is like the bank... (c) EC8OR [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
next reply other threads:[~2005-07-13 21:52 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2005-07-13 21:52 Konstantin A. Lepikhov [this message] 2005-07-14 10:49 ` Alexey Gladkov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20050713215228.GB22719@lks.home \ --to=lakostis@altlinux.org \ --cc=devel@altlinux.ru \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git