it-swarm.com.ru

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

Заранее спасибо за помощь.

5
Keen Mouse

Я попал в ту же растерянность, я чувствую твою боль. После долгих чтений мне стало ясно, что большинство статей устарели и ссылаются на предыдущие методы (или иногда комбинации).

Используя 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. Насколько я знаю, это самый современный "рецепт" (из шести доступных сейчас!)

Вам не нужно устанавливать 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.10 per 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: OR SetHandler" прокси: fcgi:

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

12
scipilot