Как настроить Apache для запуска PHP как FastCGI в Ubuntu 12.04 через терминал?

Я относительно новичок в мире управления / администрирования веб-серверов командной строки unix.

Многие хосты с параметрами администрирования панели управления позволяют вам изменить способ запуска PHP с помощью простой опции.

Наиболее распространенными вариантами являются:

  • модуль apache
  • Приложение CGI
  • Приложение FastCGI

Мой вопрос просто в том, как вы можете изменить это с помощью командной строки? Я знаю, что существует много конфигурационных файлов для apache.

Самое близкое, что я нашел, это этот вопрос, однако структура каталогов, похоже, не соответствует моей ОС (Ubuntu 12.04).

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

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

К вашему сведению, я использую Ubuntu 14.04, Apache 2.4, а также по умолчанию был запущен modphp, в предыдущих инструкциях также не упоминалась необходимость отключения modphp.

Я также обнаружил http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ быть очень информативным и простым.

Просто запустите следующие команды в терминале одну за другой.

Сначала установите необходимые пакеты (я оставляю php5, поскольку предполагается, что он уже установлен, добавьте его обратно при первой установке). Также обратите внимание, что начиная с Apache 2.4 и выше вы можете использовать event-mpm вместо worker см. http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/. В моем примере показан worker, но просто замените слово worker на event, если вы предпочитаете использовать это.

sudo apt-get install apache2-mpm-workersudo apt-get install libapache2-mod-fastcgi php5-fpm

Теперь включите моды, которые вам нужны, и отключите те, которые вам не нужны.

sudo a2dismod php5 mpm_preforksudo a2enmod actions fastcgi alias mpm_worker

Создайте файл php5.fcgi и дайте веб-серверу разрешение на его использование.

sudo touch /usr/lib/cgi-bin/php5.fcgisudo chown -R www-data:www-data /usr/lib/cgi-bin

Создайте глобальную конфигурацию для php5-fpm

sudo nano /etc/apache2/conf-available/php5-fpm.conf

вставьте следующее (мы будем использовать сокет вместо IP-адреса)

<IfModule mod_fastcgi.c>    AddHandler php5.fcgi .php    Action php5.fcgi /php5.fcgi    Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi    FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600    <Directory /usr/lib/cgi-bin>       Require all granted   </Directory> </IfModule>

Включите php5-fpm conf

sudo a2enconf php5-fpm

Перезапустите apache и fpm

sudo service apache2 restart && sudo service php5-fpm restart

В соответствии с другими инструкциями вставьте следующее в новый доступный для просмотра php-файл на вашем веб-сервере.

<?php phpinfo();

Откройте файл, который вы только что отредактировали в веб-браузере, Если вы увидите "FPM/FastCGI" рядом с Server API, теперь вы обслуживаете PHP с помощью FastCGI!

Наконец-то я нашел хороший учебник, предназначенный именно для этого. Я опишу шаги, которые я предпринял, поскольку у меня уже был установлен стек LAMP, но полное руководство можно найти здесь здесь.

Примечание для нового:

В учебном пособии он начинается с переключения на пользователя root с помощью:

sudo su

В моем случае я просто поставил префикс этим командам sudo вместо того, чтобы переключать пользователей, я буду документировать свои шаги таким образом.

Начать

Шаг первый: Установите Apache Worker MPM (Многопроцессорные модули)

sudo apt-get install apache2-mpm-worker

Это заменяет установленную мной предварительную форку, которая используется по умолчанию при установке Apache.

Шаг 2: Установите PHP5 и необходимые модули

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

На этом этапе вы можете получить сообщение об ошибке при установке 'libapache2-mod-fastcgi':

Reading package lists... DoneBuilding dependency tree       Reading state information... DonePackage libapache2-mod-fastcgi is not available, but is referred to by another package.This may mean that the package is missing, has been obsoleted, or is only available from another sourceE: Package 'libapache2-mod-fastcgi' has no installation candidate

Этой части нет в приведенном выше руководстве

Чтобы примирить это, в multiverse репозиторий должен быть добавлен в apt sources.

Чтобы сделать это:

sudo nano /etc/apt/sources.list

К которому я добавил следующие строки:

deb http://archive.ubuntu.com/ubuntu precise multiversedeb http://archive.ubuntu.com/ubuntu precise-updates multiversedeb http://security.ubuntu.com/ubuntu precise-security multiverse

precise в данном случае имеется в виду моя версия Ubuntu "Точный Панголин".

Итак, теперь сохраните эти изменения и вернитесь к терминалу:

sudo apt-get update

и снова:

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

который теперь будет (должен) работать.

Теперь включите эти модули Apache:

sudo a2enmod actions fastcgi alias

перезапустить apache

sudo service apache2 restart

Шаг 3: Настройка Apache

Чтобы заставить Apache работать с PHP-FPM, нам нужна следующая конфигурация:

<IfModule mod_fastcgi.c>    AddHandler php5-fcgi .php    Action php5-fcgi /php5-fcgi    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization    <Directory /usr/lib/cgi-bin>        Require all granted     </Directory>    #directory statement mult be on multiple lines</IfModule>

Примечание:

Если вы используете более старую версию Apache (2.3.x или более раннюю), оставьте строку

   <Directory /usr/lib/cgi-bin> Require all granted </Directory>

Вы можете проверить установленную версию с помощью команды

apache2 -version

Вы можете поместить его в глобальную конфигурацию Apache (чтобы он был включен для всех хостов), например, в /etc/apache2/conf.d/php5-fpm.conf (этот файл не существует, поэтому вы должны его создать), или вы можете разместить его на каждом vhost, который должен использовать PHP-FPM.

Я выбираю идти глобальным путем, так что:

sudo nano /etc/apache2/conf.d/php5-fpm.conf

вставьте приведенный выше блок кода и сохраните, завершите работу.Этот новый файл будет автоматически загружен конфигурацией Apache по умолчанию, которая загружает все файлы в /etc/apache2/conf.d/ каталог.

перезапустить Apache:

sudo service apache2 restart

Теперь создайте следующий PHP-файл в корне документа /var/www:

sudo nano /var/www/info.php

Добавь:

<?php phpinfo();

сохранить и выйти.

Теперь мы вызываем этот файл в браузере (например http://your-server-ip/info.php)

Под Серверный API вверху вы должны увидеть FPM/FastCGI.

Успех!

Для получения дополнительной информации, например, о том, как изменить PHP-FPM на использование сокета unix вместо TCP-порта по умолчанию или как настроить это для отдельных виртуальных хостов, а не для всех, см. Исходный учебник, связанный вверху.

В Ubuntu 14.04 после выполнения шагов принятого ответа отредактируйте /etc/apache2/conf-доступно/php5-fpm.conf

<IfModule mod_fastcgi.c>    AddHandler php5-fcgi .php    Action php5-fcgi /php5-fcgi    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600    <Directory /usr/lib/cgi-bin>        Require all granted    </Directory></IfModule>

Затем выполните

#sudo a2enconf php5-fpm#sudo apache2 restart

В случае, если кто-то делает это в Ubuntu 16.04 и понизил рейтинг с php 7 до php 5.6 (Ondrej), вам необходимо заменить некоторые строки (на основе ответа JDawgg):

sudo apt-get устанавливает libapache2-mod-fastcgi php5-fpm для:

sudo apt-get install libapache2-mod-fastcgi php5.6-fpm 

sudo a2dismod php5 mpm_prefork для:

sudo a2dismod php5.6 mpm_prefork

sudo nano /etc/apache2/conf-доступен/php5-fpm.conf для:

sudo vim /etc/apache2/conf-available/php5.6-fpm.conf

Процесс установки php5.6-fpm уже создал файл, поэтому нет необходимости его создавать. Однако я удалил весь существующий текст в этом файле, поскольку он предназначался для mod_php5.

<IfModule mod_fastcgi.c>    AddHandler php5.fcgi .php    Action php5.fcgi /php5.fcgi    Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi    FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization -idle-timeout 3600    <Directory /usr/lib/cgi-bin>       Require all granted   </Directory> </IfModule>

Я изменил путь с /var/run/php5-fpm.sock на /var/run/php/php5.6-fpm.sock, так как файл находился там.

sudo a2enconf php5-fpm для:

sudo a2enconf php5.6-fpm

перезапуск службы sudo apache2 и перезапуск службы sudo php5-fpm для:

sudo service apache2 restart && sudo service php5.6-fpm restart

Я надеюсь, что это поможет другим новичкам, таким как я :)

[Это](http://www.fastcgi.com/drupal/node/10 /) на fastcgi объясняет это довольно хорошо.

@ta.speot.is прощение, прошу прощения.. Спасибо, Мэтт, конечно, я посмотрел на fastcgi.com , но я обнаружил, что следовать этим инструкциям немного сложно.

  • Самое близкое, что я нашел, - это этот вопрос на SO * Этот веб-сайт не является переполнением стека.

@ta.speot.is , Простая опечатка. Он имел в виду “СЕ”, а не “ТАК”.