Настройка Apache 2.4 с FastCGI в Ubuntu 16.04 - Что мне делать с php7.0-fpm.conf?
Мне удалось заставить FastCGI работать с Apache 2.4 в Ubuntu 16.04, адаптировав инструкции из этого потока аскубунту, этого документа HowtoForge и этого учебного пособия по Digital Ocean.
Все эти источники говорят, чтобы создать /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
за? Если я включу его в дополнение к моему 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
Кроме того, в этой статье от Apache подробно описаны три подопции для настройки mod_proxy_fcgi для подключения к FPM с использованием ProxyPassMatch или SetHandler + UDS. Обратите внимание, что UDS начиная с версии Apache 2.4.10 для https://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 - с помощью конфигурации "Обработчик / Действие / Псевдоним /FastCgiExternalServer"
а. mod_fastcgi
б. mod_fcgid
Использование PHP-FPM через mod_proxy_fcgi, настраивается через:
а. Сокет TCP (IP и порт) ProxyPassMatch ... fcgi://127.0.0.1:9000/ путь /
б. Сокет домена Unix (UDS) ProxyPassMatch … unix:/ путь / к / сокету
с. (UDS) через SetHandler "прокси: unix: ИЛИ SetHandler" прокси: fcgi:
Отказ от ответственности: это все для меня в новинку, так что я, вероятно, все еще имею пять неправильных вещей и десять вещей, чтобы изучить