Что мне нужно сделать, чтобы использовать mod_fcgid вместо mod_php в Ubuntu и CentOS? Каковы основные преимущества и различия между ними?
решение1
mod_php:
- немного быстрее, чем mod_fcgid
- работает под управлением процесса httpd
- иметь доступ к Apache API (de.php.net/manual/en/ref.apache.php)
- плохо для общего хостинга, так как все домены работают под одним и тем же пользователем
mod_fcgid:
- скрипты запускаются под нужным вам пользователем (подходит для общего хостинга)
- повышенная безопасность
- может запускать не только php
- вы можете запустить несколько версий PHP, например php4, php5, php5.1, php5.2, php 5.3
решение2
На моей платформе общего хостинга я использую FastCGI для запуска PHP, а не вызываю его напрямую. Они запускают PHP через CGI по умолчанию, а не как модуль, поэтому для меня это был просто вопрос добавления следующего в мой .htaccess
файл:
AddHandler application/myphp .php
Action application/myphp /cgi-bin/myphp.fcgi
Далее мне нужно было создать myphp.fcgi
скрипт в каталоге cgi-bin, содержащий:
#!/bin/sh
# This ensures PHP doesn't try to run it's own
# process manager.
export PHP_FCGI_CHILDREN=0
# Replace this shell image with a PHP
# image.
exec /path/to/php -c /path/to/my/php.ini
У меня все работает безупречно, а моя хостинговая среда работает в кластере из почти десятка серверов за аппаратным балансировщиком нагрузки.
решение3
cgi = каждый запрос запускает процесс и возвращает результаты клиенту fcgi = приложение (например, Ruby/Django) или интерпретатор (PHP) продолжает работать, а веб-сервер пересылает запросы и получает от него ответы.
FastCGI почти всегда быстрее (для вещей, которые его поддерживают), однако некоторые очень древние вещи (например, nagios) нуждаются в cgi. Единственное реальное преимущество cgi в том, что там, где нет скриптов трафика, cgi-приложение не использует память, но обычно веб-сервер достаточно умен, чтобы закрыть FastCGI-приложение, которое не используется в течение некоторого времени, так что это не реальное преимущество