Разница между FastCgiExternalServer и FastCgiServer в Apache FastCGI PHP?

Просто позвольте мне заявить, что я новичок в 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 работал?

8

Решение

FastCgiServer — это сервер, для которого mod_fastcgi будет осуществлять управление процессами — вращая экземпляры вверх и вниз и предоставляя им сокет домена unix для прослушивания. Для запуска сервера fastcgi никаких внешних действий не требуется.

FastCgiExternalServer — это сервер, для которого mod_fastcgi НЕ будет выполнять какое-либо управление процессами — он просто обратится к сокету unix или TCP, который вы ему скажете, чтобы использовать его, и перенаправит запросы / ответы на него. Вы или какой-либо демон вне httpd должны запустить что-то для прослушивания в указанном сокете. Самый простой способ — утилита ‘fcgistarter’, другие опции, такие как php-fpm.

11

Другие решения

Если производительность — причина, я бы сказал, используйте Apache с fcgid. Это считается лучшим для производительности.
Чтобы справиться с производительностью, mod_fcgid запускает несколько экземпляров программ CGI для обработки одновременных запросов. Это альтернатива mod_php для разработчиков PHP, обеспечивающая более высокую производительность. Эта статья, которую я нашел — отличный ресурс для изучения

http://2bits.com/articles/apache-fcgid-acceptable-performance-and-better-resource-utilization.html

1

По вопросам рекламы [email protected]