Просто позвольте мне заявить, что я новичок в FastCGI. У меня есть Apache MAMP на моей машине OS X. Обработчик PHP по умолчанию был Apache Handler 2.0
(Libphp5.so). Я хотел измениться на FastCGI
и последовал за ответом здесь: Как настроить Apache для запуска PHP как FastCGI на Ubuntu 12.04 через терминал?
Я добавил следующее в конце моего httpd.conf:
<IfModule mod_fastcgi.c>
AddHandler php5.fcgi .php
Action php5.fcgi /php5.fcgi
Alias /php5.fcgi /Applications/MAMP/fcgi-bin/php5.fcgi
FastCgiServer /Applications/MAMP/fcgi-bin/php5.fcgi -socket /Applications/MAMP/tmp/php-fcgi/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
#FastCgiExternalServer /Applications/MAMP/fcgi-bin/php5.fcgi -socket /Applications/MAMP/tmp/php-fcgi/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
<Directory /Applications/MAMP/fcgi-bin>
Order allow,deny
Allow from all
</Directory>
</IfModule>
Однако, как вы можете видеть, FastCgiExternalServer
закомментировано. Вместо этого мне пришлось использовать FastCgiServer
В противном случае Apache выдавал мне следующие ошибки при попытке запроса страницы:
[Пт Май 06 23:25:22 2016] [ошибка] [client :: 1] (2) Нет такого файла или каталога: FastCGI: не удалось подключиться к серверу «/Applications/MAMP/fcgi-bin/php5.fcgi» : сбой соединения [Пт Май 06 23:25:22 2016] [ошибка] [клиент :: 1] FastCGI: неполные заголовки (0 байт) получены с сервера «/Applications/MAMP/fcgi-bin/php5.fcgi»
Но /Applications/MAMP/fcgi-bin/php5.fcgi
существует и его содержание:
#!/bin/bash
PHP_CGI=/Applications/MAMP/bin/php/php5.6.2/bin/php-cgi
exec $PHP_CGI
В чем разница между FastCgiServer
а также FastCgiExternalServer
и почему FastCgiExternalServer
не работает в моем случае, но FastCgiServer
работал?
FastCgiServer — это сервер, для которого mod_fastcgi будет осуществлять управление процессами — вращая экземпляры вверх и вниз и предоставляя им сокет домена unix для прослушивания. Для запуска сервера fastcgi никаких внешних действий не требуется.
FastCgiExternalServer — это сервер, для которого mod_fastcgi НЕ будет выполнять какое-либо управление процессами — он просто обратится к сокету unix или TCP, который вы ему скажете, чтобы использовать его, и перенаправит запросы / ответы на него. Вы или какой-либо демон вне httpd должны запустить что-то для прослушивания в указанном сокете. Самый простой способ — утилита ‘fcgistarter’, другие опции, такие как php-fpm.
Если производительность — причина, я бы сказал, используйте Apache с fcgid. Это считается лучшим для производительности.
Чтобы справиться с производительностью, mod_fcgid запускает несколько экземпляров программ CGI для обработки одновременных запросов. Это альтернатива mod_php для разработчиков PHP, обеспечивающая более высокую производительность. Эта статья, которую я нашел — отличный ресурс для изучения
http://2bits.com/articles/apache-fcgid-acceptable-performance-and-better-resource-utilization.html