Назад | Перейти на главную страницу

Пытаюсь подтвердить, что php7.0-fpm работает с apache в Ubuntu 16.04

Я настроил php7.0-fpm для работы с apache в Ubuntu 16.04, но не уверен, правильно ли он настроен и работает.

Насколько я понимаю, после установки и настройки вывод информационного файла php должен отображать «Server API -> FPM / FastCGI», но он все еще показывает «Server API -> Apache 2.0 Handler».

Вот как я установил и настроил php7.0-fpm:

sudo apt-get install libapache2-mod-fastcgi php7.0-fpm

sudo a2enmod actions fastcgi alias

sudo a2enconf php7.0-fpm

sudo service php7.0-fpm restart

sudo systemctl status php7.0-fpm

sudo systemctl restart apache2.service

Ниже приведен вывод команды sudo systemctl status php7.0-fpm:

php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-11-25 11:57:33 UTC; 23h ago
Process: 1149 ExecStartPre=/usr/lib/php/php7.0-fpm-checkconf (code=exited, status=0/SUCCESS)
Main PID: 1336 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3
Memory: 37.8M
CPU: 3.089s
CGroup: /system.slice/php7.0-fpm.service
├─1336 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─1340 php-fpm: pool www
└─1341 php-fpm: pool www

Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.

Что я делаю не так? Был бы признателен за помощь и совет?

Ниже приведено содержание моих /etc/apache2/conf-enabled/php7.0-fpm.conf файл:

<Directory /usr/lib/cgi-bin>
    Require all granted
</Directory>
<IfModule mod_fastcgi.c>
    AddHandler php7-fcgi .php 
    Action php7-fcgi /php7-fcgi
    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 Authorization
</IfModule>

Мне удалось заставить это работать без особых проблем, следуя инструкциям на Блог разработчиков Koen Reiniers. Я почти точно следовал инструкциям, и за одним исключением, отмеченным в комментариях к сообщениям в блоге, это сработало отлично. Тебе понадобится mod_fastcgi, а также несколько других модулей. Этот рецепт позволит вам настроить несколько виртуальных хостов, каждый из которых использует независимую конфигурацию php7 fpm. Обратите внимание, что если phpinfo () показывает серверный API "FPM / FastCGI", значит, вы не заметили. Это кислотная проверка того, что стек работает. В качестве проверки я также выполнил «<? Php touch ('/ tmp / fpmtest');» чтобы проверить, что процессы, запущенные для моего виртуального хоста, выполнялись от имени указанного пользователя / группы (они были).

Этот рецепт скопирован с некоторыми изменениями из блога Коэна, и ему следует отдать должное за его четкие и эффективные указания.

За возможным исключением содержащихся в нем строф, связанных с безопасностью, вы делаете не хотите включить Apache conf для php7.0-fpm если использовать этот рецепт. Единственный код, который необходимо выполнить глобально:

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

Если ваша конфигурация Apache2 позволяет mod_cgi.c то, вероятно, об этом уже позаботились в файле conf по умолчанию для модуля. В противном случае, если этот модуль (или mod_cgid.c) еще не включен, его можно добавить в любой файл conf, который выполняется при запуске Apache2, хотя, в зависимости от среды вашего сервера, может быть более безопасно добавить его только в каждый <VirtualHost>, для которого настроен PHP-FPM. включен. Код безопасности из php7.0-fpm.conf также можно скопировать в то же место или включить глобально.

В этом руководстве предполагается, что у вас работает PHP 7.0. *, А также Apache (с виртуальными хостами) на сервере Ubuntu. Кроме того, не пытайтесь использовать это в производственной среде без надлежащих резервных копий.

Сначала убедитесь php7.0-fpm установлен в вашей системе:

$ sudo apt-get install php7.0-fpm

После установки запустите службу, если она не была выполнена автоматически, и убедитесь, что она работает:

$ sudo service php7.0-fpm start && ps aux | grep php-fpm

Чтобы использовать PHP-FPM для каждого из ваших виртуальных хостов, вам придется разделить его на несколько пулов ресурсов, по одному для каждого отдельного пользователя <VirtualHost>, что означает, что если у вас есть несколько хостов, назначенных одному пользователю, у вас будет только чтобы создать один пул ресурсов для этого пользователя.

Расположение по умолчанию для конфигурации пула для PHP-FPM:

/etc/php/7.0/fpm/pool.d/

Чтобы создать новую конфигурацию для одного из ваших пользователей, просто создайте новый файл .conf. Я использовал имя пользователя в качестве имени файла конфигурации:

$ sudo vim /etc/php/7.0/fpm/pool.d/username.conf

И используйте это как свою конфигурацию (замените "username" на настоящее имя вашего пользователя):

[username]
    user = username
    group = username
    listen = /run/php/php7.0-fpm.username.sock
    listen.owner = username
    listen.group = username
    listen.mode = 0666

    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3

Первые семь строк самые важные. Убедитесь, что они такие же, как пользователь виртуального хоста Apache. Последние пять строк - это настройки по умолчанию для диспетчера процессов. Для простоты оставьте их как есть, но вы можете изменить их по своему вкусу. Вы можете узнать больше об этих настройках в конфигурационном файле по умолчанию, расположенном по адресу:

/etc/php/7.0/fpm/pool.d/www.conf

Остается только сказать Apache использовать PHP-FPM вместо mod_php. Во-первых, убедитесь, что у вас включены и mod_actions, и mod_fastcgi:

$ sudo a2enmod actions fastcgi
$ sudo service apache2 restart

Добавьте обработчик fastcgi PHP-FPM в Apache. Вам нужно будет сделать это для каждого пользователя, которому вы хотите иметь возможность использовать PHP-FPM. Отредактируйте файл per-vhost для имени пользователя, обычно по адресу:

/etc/apache2/sites-available/username.conf

Добавьте следующее вверху:

<IfModule mod_fastcgi.c>
  AddHandler php7-fcgi-username .php
  Action php7-fcgi-username /php7-fcgi-username
  Alias /php7-fcgi-username /usr/lib/cgi-bin/php7-fcgi-username
  FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-username -socket /run/php/php7.0-fpm.username.sock -pass-header Authorization
</IfModule>

Опять же, замените «username» фактическим именем пользователя виртуального хоста.

Вы должны указать своему виртуальному хосту, чтобы он действительно использовал его для файлов .php, поэтому в том же файле, но в директиве <VirtualHost>, добавьте следующие строки:

<IfModule mod_fastcgi.c>
  <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    SetHandler php7-fcgi-username
  </FilesMatch>
</IfModule>

Снова замените «username» именем фактического пользователя vhost и сохраните файл. Это очень важно чтобы директива SetHandler была записана с подмножеством тегов контейнера условной файловой системы Apache, <Location>, <LocationMatch>, <Files> или <FilesMatch>. Если этого не сделать, SetHandler будет проигнорирован. Тег <Directory> явно не режет.

Если вы хотите воспользоваться возможностями PHP-FPM «status» и «ping» и включить их в файле пула per-vhost в /etc/php/7.0/fpm/pool.d каталог (см. /etc/php/7.0/fpm/pool.d/www.conf для получения дополнительной информации) вам нужно будет внести две дополнительные модификации в вашу установку Apache2. В Действие директива в верхней части файла per-vhost .conf должна заканчиваться словом "virtual", таким образом:

Action php7-fcgi-username /php7-fcgi-username virtual

Кроме того, ваша оболочка SetHandler должна указывать регулярное выражение, которое включает эти виртуальные файлы. Я использую следующее:

<LocationMatch ".+\.ph(p[3457]?|t|tml)|/(ping|status)$">
    SetHandler ....
</LocationMatch>

Теперь осталось только позволить Apache перезагрузить свои файлы конфигурации:

$ sudo service apache2 reload

Чтобы проверить, вступили ли ваши изменения в силу, создайте файл phpinfo.php в общедоступном каталоге своего веб-сайта и откройте его в своем браузере:

&lt;?php phpinfo();

Серверный API, показанный в верхней части страницы, должен отображать «FPM / FastCGI».

Чтобы завершить процесс, вы должны повторить шаги для каждого из ваших виртуальных хостов. Когда ты полностью уверен mod_php больше не используется, вы можете отключить его:

$ sudo a2dismod php7.0

Пока вы этого не сделаете, Apache по-прежнему будет включать PHP-процесс для каждого запроса, а это означает, что использование памяти останется прежним, а возможно, и выше.

Вам необходимо включить proxy_fcgi модуль и отключить mod_php7, для акции php7.0-fpm conf, чтобы он был эффективным.

Если вы посмотрите на /etc/apache2/conf-enabled/php7.0-fpm.conf, вы увидите это вверху:

<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>