Я настроил 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>
Вам необходимо включить модуль proxy_fcgi
и отключить mod_php7
для стоковой php7.0- fpm
conf, чтобы действовать.
Если вы посмотрите /etc/apache2/conf-enabled/php7.0-fpm.conf
, вы увидите это вверху:
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
Мне удалось заставить это работать без особых проблем, следуя указаниям в блоге разработчиков Koen Reiniers . Я почти точно следовал инструкциям, и за одним исключением, отмеченным в комментариях к сообщениям в блоге, это сработало отлично. Вам понадобится mod_fastcgi , а также несколько других модулей. Этот рецепт позволит вам настроить несколько виртуальных хостов, каждый из которых использует независимую конфигурацию php7 fpm. Обратите внимание: если phpinfo () не показывает серверный API «FPM / FastCGI», значит, вы не попали в точку. Это кислотная проверка того, что стек работает. В качестве проверки я также выполнил « Php touch ('/ tmp / fpmtest');» чтобы проверить, что процессы, запущенные для моего виртуального хоста, выполняются от имени указанного пользователя / группы (они были).
Этот рецепт скопирован, с некоторыми изменениями, из блога Коэна, и ему следует отдать должное за его четкие и эффективные указания .
За возможным исключением в нем разделов, связанных с безопасностью, вы не хотите включать конфигурацию Apache для php7.0-fpm , если вы используете этот рецепт. Единственный код, который необходимо выполнить глобально:
<Directory "/usr/lib/cgi-bin">
Require all granted
</Directory>
Если ваша конфигурация Apache2 включает mod_cgi.c , то это, вероятно, уже учтено в конфигурационном файле по умолчанию для модуля. В противном случае, если этот модуль (или mod_cgid.c ) еще не включен, его можно добавить в любой файл conf, который выполняется при запуске Apache2, хотя, в зависимости от среды вашего сервера, он может быть больше безопасно добавлять его только к каждому
В этом руководстве предполагается, что у вас работает 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 для каждого из ваших виртуальных хостов, вам придется разделить его на несколько пулов ресурсов, по одному для каждого отдельного
Местоположение по умолчанию для конфигурации пула для 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,
Если вы хотите воспользоваться возможностями 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 в общедоступном каталоге вашего веб-сайта и посетите его в своем браузер:
<?php phpinfo();
Серверный API, показанный в верхней части страницы, должен отображать «FPM / FastCGI».
Чтобы завершить процесс, вы должны повторить шаги для каждого из ваших виртуальных хостов. Если вы полностью уверены, что mod_php больше не используется, вы можете отключить его с помощью:
$ sudo a2dismod php7.0
Пока вы этого не сделаете, Apache по-прежнему будет включать процесс PHP для каждого запроса, что означает, что использование памяти останется то же самое, а возможно, и выше.