Пытаюсь подтвердить, работает ли 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>
1
задан 22 December 2017 в 07:18
2 ответа

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

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

<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
1
ответ дан 3 December 2019 в 20:17

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

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

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

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

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

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

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

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

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

И используйте это в качестве вашей конфигурации (замените «имя пользователя» на фактическое имя вашего пользователя):

[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» на фактическое имя пользователя vhost.

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

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

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

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

1
ответ дан 3 December 2019 в 20:17

Теги

Похожие вопросы