Настройка 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

http://php.net/manual/en/install.unix.debian.php (2013)

Кроме того, в этой статье от 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

Итак, я пришел к выводу, что теперь есть шесть способов его настройки:

В примерно историческом порядке:

  1. Модуль Apache PHP: mod_php (по старинке)

  2. Через FastCGI - с помощью конфигурации "Обработчик / Действие / Псевдоним /FastCgiExternalServer"

    а. mod_fastcgi

    б. mod_fcgid

  3. Использование PHP-FPM через mod_proxy_fcgi, настраивается через:

    а. Сокет TCP (IP и порт) ProxyPassMatch ... fcgi://127.0.0.1:9000/ путь /

    б. Сокет домена Unix (UDS) ProxyPassMatch … unix:/ путь / к / сокету

    с. (UDS) через SetHandler "прокси: unix: ИЛИ SetHandler" прокси: fcgi:

Отказ от ответственности: это все для меня в новинку, так что я, вероятно, все еще имею пять неправильных вещей и десять вещей, чтобы изучить

Другие вопросы по тегам