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

36

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

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

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

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

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

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

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

Эван Маттсон
источник
Самым близким, что я нашел, является этот вопрос на SO, что веб-сайт не является переполнением стека.
ta.speot.is
1
Это на fastcgi объясняет это довольно хорошо.
1
@ ta.speot.is прощение, pleaassuh . , Спасибо, Мэтт, конечно, я посмотрел на fastcgi.com, но мне было трудно следовать этим инструкциям.
Эван Мэтсон
@ ta.speot.is, Простая опечатка. Он имел в виду «SE», а не «ТАК».
Pacerier

Ответы:

49

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

К вашему сведению, я использую 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/ . Мой пример показывает работника, но просто замените слово работник на событие, если вы предпочитаете его использовать.

sudo apt-get install apache2-mpm-worker

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

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

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

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

sudo touch /usr/lib/cgi-bin/php5.fcgi

sudo 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!

JDawgg
источник
4
Это спасатель. Инструкции для более старых apache не работали на Ubuntu 14.04 и apache 2.4; но этот работал как шарм. +100 !!
Бхавин Доши
Я точно следовал этому, но я получаю сообщение об ошибке «У вас нет прав доступа к /php5.fcgi/index» ... И в журнале ошибок «клиент отклонен конфигурацией сервера: / usr / lib / cgi-bin» /php5.fcgi '... Есть идеи?
Просто повезло действительно
Разобрался ... Я по какой-то причине использовал старую конфигурацию "запретить, разрешить" для root ... Все исправлено: D
Just Lucky Really
Я получил следующую ошибку после установки пакетов и конфигурации "apache2: синтаксическая ошибка в строке 216 файла /etc/apache2/apache2.conf: синтаксическая ошибка в строке 9 файла /etc/apache2/conf-enabled/php5-fpm.conf: ожидается </ Directory> но видел </ IfModule> "
Фарук,
Сделан GitHub GIST для этого gist.github.com/efarem/4a8fc03dc69d81998f6e518620f63421
Фрэнк Мартин
20

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

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

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

sudo su

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

Начать

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

sudo apt-get install apache2-mpm-worker

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

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

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

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

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 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 source

E: Package 'libapache2-mod-fastcgi' has no installation candidate

Эта часть не в учебнике выше

Чтобы согласовать это, multiverseхранилище должно быть добавлено к подходящим источникам.

Сделать это:

sudo nano /etc/apt/sources.list

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

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

preciseв данном случае относится к моей версии Ubuntu " Precise Pangolin ".

Теперь сохраните эти изменения и вернитесь в терминал:

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 (чтобы он был включен для всех vhosts), например, в /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)

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

Успех!

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

Эван Маттсон
источник
Я должен был добавить это раньше </ IfModule>: <Directory / usr / lib / cgi-bin> Требовать все предоставлено </ Directory>
Риму Аткинсон
@RimuAtkinson является верным, по умолчанию все каталоги будут запрещены в более новых версиях, поэтому вам придется специально предоставить доступ к каталогу cgi-bin. Это должно быть добавлено к ответу, так как без него вы получите 403.
Джон
Спасибо за это Howto! Обратите внимание, что эта Require all grantedвещь требуется только начиная с Apache 2.4. Если я помещу это в файл конфигурации с Apache 2.2, это терпит неудачу.
Leemes
Я добавил заметку. ( Не стесняйтесь тонкой редактировать его, это ваш пост;) . ) Для получения дополнительной информации см stackoverflow.com/a/22040167/592323
leemes
1
Этот ответ не работает на Ubuntu 14.04. Обратитесь к ответу JDawgg, чтобы сделать это в 14.04.
Бхавин Доши
1

В Ubuntu 14.04 после выполнения шагов принятого ответа отредактируйте /etc/apache2/conf-available/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
marcanuy
источник
0

В случае, если кто-то делает это в Ubuntu 16.04 и понизил версию с php 7 до php 5.6 (ондрей), вам нужно заменить несколько строк (основываясь на ответе 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-available/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

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

Nazq
источник