
Мне удалось заставить FastCGI работать с Apache 2.4 на Ubuntu 16.04, адаптировав инструкции изэта тема askubuntu,этот документ HowtoForge, иэтот учебник по цифровому океану.
Все эти источники говорят, чтосоздавать /etc/apache2/conf-available/php7.0-fpm.conf
и скажу вам, что в него вставить. Но после установки php-fpm
у меня уже есть этот файл со следующим содержимым:
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
# Enable http authorization headers
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
</FilesMatch>
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
</IfModule>
Поэтому вместо этого я создал свой собственный conf, поместил в него код из инструкций и включил его.
Для чего существует php7.0-fpm.conf
? Если я включу его в дополнение к своей конфигурации, мои веб-сайты перестанут работать. Я беспокоюсь, что я не делаю это так, как это должно быть сделано, и в будущем могут возникнуть проблемы. Очень сложно найти хорошую, актуальную документацию по этому вопросу.
Для справки, вот вся моя процедура:
sudo apt install libapache2-mod-fastcgi php-fpm
sudo a2dismod php7.0 mpm_prefork
sudo a2enmod actions fastcgi alias mpm_worker
sudoedit /etc/apache2/conf-available/custom-fpm.conf
Содержание /etc/apache2/conf-available/custom-fpm.conf
:
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi virtual
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
Команды продолжились:
sudo a2enconf custom-fpm
sudo systemctl restart apache2 && sudo systemctl restart php7.0-fpm
Заранее спасибо за вашу помощь.
решение1
Я столкнулся с той же путаницей, я чувствую твою боль. После долгого чтения мне стало ясно, что большинство статей устарели и ссылаются на предыдущие методы (или иногда комбинации).
Используя PHP-FPM со встроенной конфигурацией Ubuntu 16.04, вытольконужно сделать это:
sudo a2enconf php7.0-fpm
sudo a2enmod proxy proxy_fcgi
Я сделал большую часть того, что сделали вы, а затем удалил все это, когда эта пользовательская конфигурация показалась мне бессмысленной.
Для чего нужен существующий php7.0-fpm.conf?
Конфигурация, которую вы обнаружили установленной пакетом, предназначена для использования mod_proxy_fcgi. Она связывает файлы .php через mod_proxy_fcgi с PHP FPM, используя mod_proxy, через Unix Domain Socket. Насколько мне известно, это самый современный "рецепт" (из шести доступных сейчас!)
Вам не нужно устанавливать, libapache2-mod-fastcgi
это другой, старый метод. Вам не нужно писать эту конфигурацию - она для использования mod_fastcgi напрямую. Вам не нужно устанавливать, actions fastcgi alias
как они есть, чтобы настроить mod_fastcgi.
Мне кажется странным, что ни в одной из статей — даже в тех, что посвящены Ubuntu 16 — не упоминается, что новый рецепт полностью готов для вас!
Этот комментарий прояснил для меня историю:
Предпочтительным методом теперь является fastcgi, использующий любой из этих рецептов:
(mod_fastcgi, httpd 2.2) http://wiki.apache.org/httpd/php-fastcgi
(mod_fcgid, httpd 2.2) http://wiki.apache.org/httpd/php-fcgid
(mod_proxy_fcgi, httpd 2.4) http://wiki.apache.org/httpd/PHP-FPM
http://php.net/manual/en/install.unix.debian.php#112544(2013)
Кроме того, эта статья от Apache, подробно описывает три подопции для настройки mod_proxy_fcgi для подключения к FPM, используя ProxyPassMatch или SetHandler + UDS. Обратите внимание, что UDS с Apache 2.4.10https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.htmlпоэтому нужен trusty-backports или новее.
https://wiki.apache.org/httpd/PHP-FPM
Итак, я пришел к выводу, что теперь есть шесть способов его настройки:
В приблизительном историческом порядке:
Модуль Apache PHP: mod_php (старый способ)
Через FastCGI - используя конфигурацию Handler/Action/Alias/FastCgiExternalServer
а. mod_fastcgi
б. mod_fcgid
Использование PHP-FPM через mod_proxy_fcgi, настроенный через:
а. TCP-сокет (IP и порт) ProxyPassMatch ... fcgi://127.0.0.1:9000/path/
б) Сокет домена Unix (UDS) ProxyPassMatch … unix:/path/to/socket
в. (UDS) через SetHandler "proxy:unix: ИЛИ SetHandler "proxy:fcgi:
Отказ от ответственности: для меня все это в новинку, так что, вероятно, я все еще ошибаюсь в пяти вещах и еще десяти вещам, которым предстоит научиться.