Як налаштувати Apache для запуску PHP як FastCGI на Ubuntu 12.04 через термінал?


35

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

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

Найпоширеніші варіанти:

  • модуль apache
  • Застосування CGI
  • Додаток FastCGI

Моє запитання просто, як це змінити за допомогою командного рядка? Я знаю, що для апаша є багато файлів конфігурації.

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

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


Найближче, що я знайшов, це питання на ТАК. Цей веб-сайт не є переповненням стека.
ta.speot.is

1
Це на fastcgi пояснює це досить добре.

1
@ ta.speot.is прощення, благання . . Дякую Метт, звичайно, я подивився на fastcgi.com, але мені виявилося, що ці інструкції трохи важко дотримуватися.
Еван Маттсон

@ ta.speot.is, Простий друк. Він мав на увазі "SE", а не "SO".
Pacerier

Відповіді:


49

Дякую за попередні відповіді, вони отримали мені більшу частину шляху, але для роботи я повинен був поєднувати інструкції з декількох місць, тому думав, що я напишу повний набір команд.

FYI Я запускаю 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 замість робочого, див. 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

sudo a2enconf php5-fpm

Перезапустіть apache та fpm

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

Відповідно до інших інструкцій, вставте наступне в новий файл, що переглядається, на PHP на своєму веб-сервері.

<?php phpinfo();

Відкрийте файл, який ви щойно відредагували у веб-браузері. Якщо біля API сервера ви бачите "FPM / FastCGI", ви зараз обслуговуєте PHP за допомогою FastCGI!


4
Це рятівник. Інструкції для старшої апаші не працювали на Ubuntu 14.04 та апаш 2.4; але цей працював як шарм. +100 !!
Бхавін Доші

Я точно дотримувався цього, але я отримую помилку "Ви не маєте дозволу на доступ /php5.fcgi/index" ... І в журналі помилок "клієнт відхилений конфігурацією сервера: / usr / lib / cgi-bin /php5.fcgi '... Будь-які ідеї?
Just Lucky Дійсно

Зрозумів це ... Я чомусь використовував стару конфігурацію "замовлення заборонити, дозволити" для root ... Все виправлено: D
Just Lucky Really

Після установки пакетів та конфігурації у мене з’явилася така помилка: apache2: синтаксична помилка у рядку 216 /etc/apache2/apache2.conf: Помилка синтаксису в рядку 9 /etc/apache2/conf-enabled/php5-fpm.conf: очікувана </Directory> але побачив </IfModule> "
Farooq

Зробив GitHub Gist для цього gist.github.com/efarem/4a8fc03dc69d81998f6e518620f63421
Frank Martin

20

Нарешті я знайшов хороший підручник, спрямований на те, щоб робити саме це. Я викладу кроки, які я здійснив, оскільки в мене вже був встановлений стек 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... 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 " Точний Панголін ".

Отже, збережіть ці зміни та поверніться до терміналу:

sudo apt-get update

і знову:

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

яка буде (повинна) працювати зараз.

Тепер увімкніть ці модулі Apache:

sudo a2enmod actions fastcgi alias

перезапустити апаш

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)

Під серверним API вгорі ви повинні побачити FPM/FastCGI.

Успіху!

Для отримання додаткової інформації про те, як змінити PHP-FPM, щоб використовувати unix-сокет замість типового порту TCP або як налаштувати це для окремих віртуальних хостів замість усіх, див. Підручник з джерелом, пов’язаний у верхній частині.


Мені довелося додати це раніше </IfModule>: <Каталог / usr / lib / cgi-bin> Вимагати всіх наданих </Directory>
Rimu Atkinson

@RimuAtkinson правильний, за замовчуванням у нових версіях всі каталоги будуть заборонені, тому вам доведеться спеціально надати доступ до каталогу cgi-bin. Це слід додати до відповіді, оскільки без нього ви отримаєте 403.
johnrom

Дякую за це! Зауважте, що 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

0

Якщо хтось робить це на Ubuntu 16.04 і перейшов з php 7 на php 5.6 (Ondrej), вам доведеться замінити деякі рядки (виходячи з відповіді JDawgg):

sudo apt - встановіть 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 service php5-fpm перезапуск:

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

Я сподіваюся, що це допомагає іншим новачкам, як я :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.