Настройка Apache 2.4 с FastCGI в Ubuntu 16.04 — что делать с php7.0-fpm.conf?

Настройка Apache 2.4 с FastCGI в Ubuntu 16.04 — что делать с php7.0-fpm.conf?

Мне удалось заставить 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

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

В приблизительном историческом порядке:

  1. Модуль Apache PHP: mod_php (старый способ)

  2. Через FastCGI - используя конфигурацию Handler/Action/Alias/FastCgiExternalServer

    а. mod_fastcgi

    б. mod_fcgid

  3. Использование 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:

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

Связанный контент