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

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

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

Насколько я понимаю, после установки и настройки вывод файла php info должен отображать «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>

решение1

Вам необходимо включить proxy_fcgiмодуль и отключить его mod_php7, чтобы стандартный php7.0-fpmфайл конфигурации вступил в силу.

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

<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>

решение2

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

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

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

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

Если ваша конфигурация Apache2 позволяетmod_cgi.cто это, вероятно, уже было учтено в файле конфигурации по умолчанию для модуля. В противном случае, если этот модуль (или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 virtualhost. Последние пять строк — настройки по умолчанию для менеджера процессов. Оставьте их как есть для простоты, но вы можете изменить их по своему вкусу. Подробнее об этих настройках можно прочитать в файле конфигурации по умолчанию, расположенном по адресу:

/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

Добавьте обработчик PHP-FPM fastcgi в 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» и включить их в файле пула для каждого виртуального хоста в/etc/php/7.0/fpm/pool.dкаталог (см./etc/php/7.0/fpm/pool.d/www.confдля получения подробной информации) вам необходимо будет внести два дополнительных изменения в настройки Apache2.ДействиеДиректива в верхней части файла .conf per-vhost должна заканчиваться на «virtual», например:

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

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

<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-процесс для каждого запроса, а это значит, что использование памяти останется прежним и, возможно, даже возрастет.

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