Совместное использование PHP-CGI между Apache и NGINX - PullRequest
1 голос
/ 22 февраля 2009

Я запускал большинство моих PHP-приложений на своем веб-сайте на сервере fastcgi, обслуживаемом NGINX. У меня есть новое приложение, которое кажется довольно хорошо интегрированным с Apache; например, он сильно зависит от динамически записанных файлов .htaccess. Я работаю над тем, чтобы изменить его для работы с NGINX, но это еще не готово. В то же время я собирался иметь прокси-сервер NGINX для всех подключений к этому пути прямо к Apache и позволить Apache обрабатывать его.

Однако я использую VPS с ограниченным объемом памяти, и я бы предпочел не запускать один набор процессов PHP-CGI для NGINX (с собственным кешем APC) и другой для Apache (использующий больше памяти для их кэш APC). Кому-нибудь посчастливилось поделиться PHP между двумя?

mod_ fcgid не поддерживает использование уже работающих серверов, поэтому я попробовал mod_ fastcgi. Поначалу казалось, что это сработало, но занимало довольно много памяти (фиксировано - оно росло, а не только статично). Хуже того, я не смог заставить строку DirectoryIndex в моих конфигах apache работать с mod_fastcgi!

Я добавил

    AddHandler php5-fastcgi .php
    FastCgiExternalServer /var/www -host 127.0.0.1:9000

к моему конфигу Apache, и все .php страницы обрабатываются, но путь, подобный http://example.com/foo/, не сервер /foo/index.php! Если я удаляю FastCgiExternalServer, то он находит index.php, но, конечно, просто показывает его как текст.

Я предполагаю, что это потому, что DirectoryIndex обрабатывается после FastCgiExternalServer, но я понятия не имею, как это можно изменить.

1 Ответ

8 голосов
/ 22 февраля 2009

Проблема решена. Хитрость заключалась в том, чтобы использовать следующие строки

FastCGIExternalServer /var/www/fast-cgi-fake-handler -host 127.0.0.1:9000
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /fast-cgi-fake-handler

Относительный путь в Action + полный путь в FastCGIExternalServer сделал это!

...