Php

Fpm apache php: Настройка Apache HTTP с MPM Event и PHP-FPM в Ubuntu 18.04

Содержание

Как действительно включить php-fpm с apache?

Я установил apache2.4 и php-fpm, но у меня все еще есть php5-cgi, обрабатывающий мои запросы, хотя процесс php-fpm запущен.

Вот что я сделал :

apt-get install php5-fpm
apt-get install libapache2-mod-fastcgi
a2enmod actions

Редактировать /etc/apache2/mods-available/fastcgi.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
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>

service apache2 restart

Но теперь, если я запускаю phpinfo(), я получаю :

Server API  CGI/FastCGI

вместо FPM / FastCGI

php

apache

Поделиться

Источник


contremaitre    

09 марта 2017 в 17:44

2 ответа


  • Настройка PHP-FPM в PHP 5. 4

    Моя конфигурация такова: Centos 6.3 Плеск 11.5 PHP 5.4.18 Apache 2.2.15 PHP API: 20100412 Server API: CGI/FastCGI Я использую php как fastcgi. Но я хочу использовать APC или XCache. И похоже, что FastCGI не очень хорошо работает с opcache. Поэтому я читал, что лучше использовать PHP-FPM. Итак, как…

  • Пользовательское сообщение 404 при использовании PHP-FPM с Apache

    У меня есть Apache (2.2.22 на Debian), настроенный для обработки PHP файлов через FastCGI: <FilesMatch .+.php$> SetHandler application/x-httpd-php </FilesMatch> Действие application/x-httpd-php / fcgi-bin/php5-fpm виртуальный псевдоним /fcgi-bin/php5-fpm /fcgi-bin-php5-fpm…



1

Хорошо, я наконец нашел, почему php fpm не использовался :
Мне нужно было включить его в свои файлы vhost. Редактировать :

/etc/apache2/sites-enabled/domain.conf

удалить :

AddType application/x-httpd-php . /(.*.php(/.*)?)$ unix:/var/run/php5-fpm.sock|fcgi://localhost/home/domain/domains/domain/public_html/$1

Поделиться


contremaitre    

10 марта 2017 в 11:47



0

еще одна попытка:

Установите Apache Worker MPM (Мультипроцессорные модули)

sudo apt-get install apache2-mpm-worker
sudo apt-get install libapache2-mod-fastcgi php5-fpm php5
sudo apt-get update

и снова:

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

sudo a2enmod actions fastcgi alias

перезагрузите apache

sudo service apache2 restart

затем sudo nano /etc/apache2/conf.d/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 -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>

затем :

sudo service apache2 restart

и это должно сработать

Поделиться


Amr Aly    

09 марта 2017 в 17:59


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

PHP-FPM, Monit, ping / status pages, Apache

Я пытаюсь контролировать свой демон FPM с помощью Monit, и я предполагаю, что следующая техника не является лучшей из-за возрождения и изменения PID? check process php5-fpm with pidfile…

Как перенаправить запросы на .php файлов в PHP-FPM для всех виртуальных хостов в Apache 2.4?

В Apache 2.2 переадресуйте все запросы, указывающие на физический файл .php в PHP-FPM , следующим образом: LoadModule fastcgi_module modules/mod_fastcgi. so FastCGIExternalServer /usr/sbin/php-fpm…

Не удается заставить php-fpm на apache работать?

Я хочу установить php-fpm для моего сервера мой сервер работает на Apache, PHP 5.3.20, Fastcgi и я также устанавливаю php-fpm, используя yum install php — fpm но теперь я смотрю на страницу phpinfo,…

Настройка PHP-FPM в PHP 5.4

Моя конфигурация такова: Centos 6.3 Плеск 11.5 PHP 5.4.18 Apache 2.2.15 PHP API: 20100412 Server API: CGI/FastCGI Я использую php как fastcgi. Но я хочу использовать APC или XCache. И похоже, что…

Пользовательское сообщение 404 при использовании PHP-FPM с Apache

У меня есть Apache (2.2.22 на Debian), настроенный для обработки PHP файлов через FastCGI: <FilesMatch .+.php$> SetHandler application/x-httpd-php </FilesMatch> Действие…

Эквивалент php_value под Apache + php-fpm

под Apache + PHP в качестве модуля вы можете установить php_value post_max_size 8M внутри. htaccess. Как я могу сделать это под Apache + PHP-FPM? Я использую директиву FastCgiExternalServer, но хочу…

Настройка страницы состояния php-fpm с помощью php7 и apache

Я пытаюсь настроить и получить статистику php-fpm с помощью вызова http. Я знаю, что можно использовать команду service status , но я хотел бы получить ее из своего браузера. Я использую php7 и…

Apache на windows и php-fpm

php 7.1 Apache 2.4 + mod_proxy_fcgi Windows 10 Я пытаюсь настроить php-fpm + apache на windows, используя mod_proxy_fcgi, но продолжаю получать ошибки. Кто-нибудь может помочь мне с настройкой…

php7.4, php7.4-fpm, http2, Apache, nginx

Могу ли я использовать php7.4-fpm с Apache? Или php-fpm действительно предназначен только для использования с nginx? И почему? Поддерживает ли php7.4 http2? Или вам все еще нужен php-fpm?…

php7.4, php7.4-fpm, http2, Apache, nginx, я запутался

Могу ли я использовать php7. 4-fpm с Apache? Или php-fpm действительно предназначен только для использования с nginx? И почему? Поддерживает ли php7.4 http2? Или вам все еще нужен php-fpm?…

Настройка страницы состояния php-fpm с помощью php7 и apache

Я пытаюсь настроить и получить статистику php-fpm с помощью вызова http. Я знаю, что можно использовать команду service status , но я хотел бы получить ее из своего браузера.

Я использую php7 и apache, и это то, что я сделал в своей конфигурации сервера.

на стороне apache я создаю vhost с помощью этого :

<LocationMatch "/fpm-status">
             Order Allow,Deny
             Allow from 127.0.0.1
             ProxyPass fcgi://127.0.0.1:9000
</LocationMatch>

В конфигурации пула php ( /etc/php/7.0/fpm/pool.d/www.conf ) У меня есть это :

[www]
user = www-data
group = www-data
listen = 127. 0.0.1:9000
listen.owner = www-data
listen.group = www-data

pm = ondemand

pm.max_children = 1000

pm.start_servers = 150
pm.min_spare_servers = 50
pm.max_spare_servers = 400
pm.max_requests = 200
pm.process_idle_timeout = 5s
pm.status_path = /fpm-status

но после перезапуска процесса apache и php-fpm, когда я пытаюсь использовать curl, я получаю этот вывод :

admin@ip-10-3-23-78:~$curl http://localhost/fpm-status
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h2>Forbidden</h2>
<p>You don't have permission to access /fpm-status
on this server.<br />
</p>
</body></html>
admin@ip-10-3-23-78:~$ 

А в лог-файле apache у меня есть вот это :

==> /var/log/apache2/error.log <==
[Thu Aug 25 13:36:10.776665 2016] [access_compat:error] [pid 12608] [client ::1:23142] AH01797: client denied by server configuration: proxy:fcgi://127. 0.0.1:9000

Я хотел бы знать, как на самом деле это устроить. Я долго гуглил и не получил точного ответа, каждый пробует свой путь.
Кто отвечает за создание страницы состояния (fpm-status в моем случае)? Когда и как эта страница генерируется (по php-fpm, я думаю)?
Как правильно настроить страницу и сделать ее доступной из браузера?

php

apache

fpm

Поделиться

Источник


nixmind    

25 августа 2016 в 11:47

4 ответа


  • php7-php-fpm носок не найден после настройки

    Я пытаюсь установить php7 на Debian 8. Я хотел бы настроить php-fpm с сокетом вместо номера порта. У меня есть enable —enable-sockets во время настройки php. Но у меня нет розетки. Как я могу найти этот сокет и установить его ?

  • Apache 2.4 и php-fpm не запускает базовую аутентификацию apache http для php страницы

    Я уверен, что это вопрос, который был задан где-то, если так, извините меня, но поиск в Google не дал мне ничего осязаемого. Вот мой сценарий : Я защищаю веб-каталог с помощью apache http basic auth. Таким образом, у меня есть мой .htaccess в корневой папке, и мой httpd.conf настроен на…



5

Возможно, сейчас уже немного поздно, но я хотел бы опубликовать прямой простой ответ на этот вопрос с помощью php-fpm(7.1+)/apache(2.4), поскольку большинство ответов, которые я нашел в интернете, были немного запутанными. При этом используются стандартные настройки php-fpm, которые требуют сопоставления сокетов unix и портов.

1) в /etc/php-fpm.d/www.conf у меня есть следующие параметры конфигурации, установленные для прослушивания носка ниже и раскомментированные:

listen = /var/run/php-fpm.sock

pm.status_path = /fpm-status

2) с моей конфигурацией apache php-latest.conf (или аналогичной) Я добавил совпадение, которое искало fpm-status, установил его на proxypass в сокет unix и запустил fpm-status из fcgi. Он также ограничивает его, так что только localhost может вызвать его:

<LocationMatch "/fpm-status">
    Order Allow,Deny
    Allow from 127.0.0.1
    ProxyPass unix:/var/run/php-fpm.sock|fcgi://localhost/fpm-status
</LocationMatch>

3) просто запустите команду curl локально:

$ curl http://localhost/fpm-status
pool:                 www
process manager:      dynamic
start time:           16/Oct/2019:11:33:25 -0400
start since:          14
accepted conn:        12
listen queue:         0
max listen queue:     0
listen queue len:     0
idle processes:       38
active processes:     2
total processes:      40
max active processes: 5
max children reached: 0
slow requests:        0

Поделиться


Miburi    

16 октября 2019 в 15:40



3

Я столкнулся с той же проблемой и потратил несколько часов, чтобы решить ее для наших установок. К сожалению, я не могу ответить на все вопросы, которые вы там поставили, это в основном рабочее решение для плитки «Set up php-fpm status page with php7 and apache»

Вот так (Ubuntu 16.04):

Шаг 1: необходимые вещи
просто проверьте, установили ли вы этот материал аналогичным образом:

apt-get -y install apache2
apt-get -y install libapache2-mod-fastcgi php7.0-fpm php7.0
a2enmod actions fastcgi alias
systemctl restart apache2.service

Шаг 2: Настройка fastcgi
в /etc/apache2/mods-available/fastcgi.conf (или аналогичном) поместите следующее:

<IfModule mod_fastcgi.c>
        # Define a named handler
        AddHandler php7-fcgi .php
        # Generate an alias pointing to /usr/lib/cgi-bin/php[VersionNumber]-fcgi
        Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
        # Configure an external server handling your upcoming requests (note where the alias is pointing towards)
        FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7. 0-fpm.sock -pass-header Authorization

         # only on if fpm-status is match. You might want to put this into your concrete vhost.conf file. For the testing, fastcgi.conf should work.
         <LocationMatch "/fpm-status">
             # set the before defined handler here
             SetHandler php7-fcgi
             # use the handler for the action handling virtual requests
             Action php7-fcgi /php7-fcgi virtual
         </LocationMatch>
</IfModule>

Шаг 3: Проверьте свой /etc/php/7.0/fpm/pool.d/www.conf
убедитесь, что вы раскомментировали путь состояния:

pm.status_path = /fpm-status

Шаг 4: Закрепите страницу (необязательно
) Прежде чем приступить к производству, конечно, разумно как-то обеспечить это, например:

 Order deny,allow
 Deny from all
 Allow from [Some-IP]

Надеюсь, это поможет, ваше здоровье.

Поделиться


Amstutz    

14 августа 2017 в 17:23



3

Если вы запускаете другие веб-приложения на своем сервере apache, вполне вероятно, что одно из них поставляется с файлом . ping|status$"> вместо <FilesMatch> .

Путь сокета определен в
/etc/php/7.2/fpm/pool.d/www.conf (listen = /run/php/php7.2-fpm.sock ) в версии по умолчанию ubuntu.

Поделиться


Felix    

17 декабря 2018 в 08:44


  • PHP7 cli vs php-fpm

    Я запускаю php за nginx с php-fpm и cron задачами до php binary (/usr/bin/php). Я обнаружил несоответствие — один и тот же скрипт выдает разные результаты, когда я запускаю его через двоичный файл php и через fpm. Обратите внимание, что это относится только к PHP7 . На другом сервере я…

  • php-fpm не создает файл .sock

    У меня есть сервер AWS, работающий на Amazon Linux. Я использовал это руководство для установки php7 (внизу страницы): https:/ / forums.aws.amazon.com / thread.jspa?messageID=695576 Я хотел бы использовать nginx вместо Apache, поэтому я также установил пакеты php70w-fpm и nginx. Однако, когда я…



0

Если вы получаете ошибку разрешений, попробуйте добавить

listen.mode = 0666

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

Это было необходимо для того, чтобы весь стек fastcgi с php-fpm работал правильно, хотя я все еще не могу просмотреть страницу состояния и получаю ошибку 404, когда пытаюсь.

Поделиться


Lindsay Haisley    

24 февраля 2018 в 05:27


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

PHP-страница состояния FPM на прокси-сервере Plesk + NGINX

Я пытаюсь включить страницу состояния PHP-FPM на vhost, работающем под управлением Plesk 17, используя apache для обслуживания файлов PHP, но с nginx в качестве прокси-сервера. Я включил страницу…

PHP-FPM, Monit, ping / status pages, Apache

Я пытаюсь контролировать свой демон FPM с помощью Monit, и я предполагаю, что следующая техника не является лучшей из-за возрождения и изменения PID? check process php5-fpm with pidfile. ..

Apache 2.4 + PHP-заголовки FPM и авторизации

Резюме: Apache 2.4’s mod_proxy, похоже, не передает заголовки авторизации в PHP-FPM. Есть ли какой-нибудь способ исправить это? Длинная версия: я запускаю сервер с Apache 2.4 и PHP-FPM. Я использую…

php7-php-fpm носок не найден после настройки

Я пытаюсь установить php7 на Debian 8. Я хотел бы настроить php-fpm с сокетом вместо номера порта. У меня есть enable —enable-sockets во время настройки php. Но у меня нет розетки. Как я могу найти…

Apache 2.4 и php-fpm не запускает базовую аутентификацию apache http для php страницы

Я уверен, что это вопрос, который был задан где-то, если так, извините меня, но поиск в Google не дал мне ничего осязаемого. Вот мой сценарий : Я защищаю веб-каталог с помощью apache http basic…

PHP7 cli vs php-fpm

Я запускаю php за nginx с php-fpm и cron задачами до php binary (/usr/bin/php). Я обнаружил несоответствие — один и тот же скрипт выдает разные результаты, когда я запускаю его через двоичный файл. ..

php-fpm не создает файл .sock

У меня есть сервер AWS, работающий на Amazon Linux. Я использовал это руководство для установки php7 (внизу страницы): https:/ / forums.aws.amazon.com / thread.jspa?messageID=695576 Я хотел бы…

Установите PHP7 fpm и memcached с Docker

У меня есть приложение с Docker, и я пытаюсь установить memcached с php7-fpm. Согласно официальной документации docker, которую я имею в своем Dockerfile: # PHP Version FROM php:7.0-fpm … #…

Установка драйвера postgre в контейнер php7-fpm Docker

Я установил контейнер PHP:latest Docker с помощью команды docker-compose. Он установил php-7.1.6-fpm в мой Docker. Когда я попытался установить расширение php7-pgsql , он не смог найти этот пакет,…

Настройка /status страницы php-fpm на Apache2

Я пытаюсь настроить страницу /status php-fpm на apache, но получаю ошибку 404, и я не могу понять почему. Я не эксперт ни в Apache2, ни в php, и я боролся с этим пару дней, так что я здесь за. ..

Настройка сервера apache mpm-event + php-fpm + http/2

Хотите воспользоваться скриптом автоматической установки? Переходите к скрипту

Не хотите читать предисловие – можно сразу перейти к настройке.

Предисловие

В последнее время в интернете распространяется стойкое убеждение, что сервер apache тормозной и пожирает кучу памяти, и если ты хочешь нормальную производительность для своего сервера — ставь nginx + apache или еще лучше nginx в голом виде и будет тебе счастье. И если надо http/2 — тоже ставь nginx.

Неужели все так плохо с apache?

NGINX лучше APACHE. Так ли это?

Неужели разработчики Apache не могут решить проблему ругаемого везде режима prefork? Неужели прошло столько времени и никто не предпринял ничего для решения известной проблемы?

Давайте разберемся – в старых версиях apache для каждого обращения к серверу выделялся отдельный процесс. В каждом процессе обрабатывался только один поток на одно соединение. В каждом процессе загружался модуль php и все библиотеки, которые были вместе с ним установлены.

Что это значит?

Предположим загружается одна страница сайта, на которой у нас есть подгрузка картинок, стилей css, js библиотек и может быть еще каких-либо вспомогательных файлов (видео или аудио). На загрузку каждого статического файла (например картинки или файла стилей CSS) apache создавал отдельный поток, в котором загружал модуль php и все сопутствующие библиотеки. Все это долго и чрезвычайно расточительно по потреблению памяти. И самое главное – зачем загружать php, если apache просто должен вернуть файл, который у нас хранится на сервере?

Почему Nginx такой хороший?

Да просто потому что для вызова php он использует интерфейс php-cgi (php-fpm), а для обслуживания статики используются потоки, которые менее ресурсоемки, нежели процессы системы. При запуске php его память не смешивается с памятью, потребляемой сервером.

А что в apache нельзя было сделать что-то подобное?

Вы не поверите!. ..

Проблема была давно понятна и так же давно эту проблему попытались решить. Долгое время решение носило статус беты, но уже несколько лет оно перешло в статус stable и начиная в версии Apache 2.4.17 устанавливается по умолчанию в новых установках сервера. Apache имеет модульную структуру и тот модуль, который отвечает за способ приема запросов и их обработки называется MPM (мульти-процессный модуль).
По-умолчанию в старых версиях apache используется MPM prefork, который создает отдельный процесс в системе на каждое обращение к серверу. Сейчас доступны MPM worker и MPM event. Самый современный и экономный в плане ресурсов памяти и процессора — это MPM event. Именно он устанавливается по умолчанию в новых версиях apache (начиная с 2.4.17).

http/2

Начиная с версии 2.4.17, в apache доступна возможность использовать http/2 для всех соединений. Для этого должен быть включен MPM event и сайт должен использовать https.

Использование MPM event означает, что нельзя использовать php в традиционном режиме в виде модуля (хотя такая возможность существует и эта связка даже запустится на тестовых сайтах). PHP в виде модуля с MPM event приведет к периодическим падениям и ошибкам работы с памятью.

Лучше всего в связке с MPM event показывает себя PHP-FPM. Эта комбинация дает нам, то чем похваляются любители NGINX. Это малое потребление памяти, ресурсов процессора и отдача статических страниц без загрузки PHP и сопутствующих библиотек. Такая комбинация показывает в реальном окружении производительность сравнимую с производительностью чистого NGINX + PHP-FPM.

А если нет разницы — зачем ставить что-то другое?

В реальном применении привычность и стабильность поведения сервера значит очень многое. Apache – это стандарт де-факто практически для любой системы и Joomla в частности. Работа с файлами htaccess описана практически в каждом руководстве.

В синтетических тестах комбинация apache+php-fpm показывает сравнимое с NGINX потребление ресурсов и скорость ответа. Реальная скорость работы будет зависеть от опытности системного администратора и конфигурации физического сервера, на котором исполняются программы.

По моим опытам в нагруженных системах комбинация apache+php-fpm значительно превосходила традиционную комбинацию nginx + apache (это оказалось самой тормознутой комбинацией из всех – хуже был только apache + mod_php) и особо не уступала чистому NGINX.

Поэтому лично я в своих серверах использую именно такую комбинацию.

Как настроить apache + php-fpm + http/2?

А вот здесь лично меня ожидало жестокое разочарование. Несмотря на то, что  в интернете существует не одно описание настройки подобных комбинаций, как оказалось – никто из авторов не утруждал себя реальными тестами на боевых серверах. Логи не разделялись по виртуальным хостам, а система все равно периодически падала по неизвестным причинам. Потоки php не убивались, как это должно было быть и в результате вся система вела себя нестабильно. Хотя на тестовых сайтах все работало чудесно.

Огромное количество времени ушло на понимание причин такого поведения и способов решения. Как оказалось, рабочего решения в интернете не существует (ну или я не умею гуглить, яндексить и бинговать). Про ProxySet disablereuse=on почему-то никто в интернете не пишет… (теперь в интернете гуглится мой вопрос и мой же ответ на stackoverflow.com). Спасибо ребятам из systemintegra.ru за то, что помогли разобраться в проблеме. Опрос знакомых сисадминов к сожалению ни к чему не привел…

В результате родилось это руководство, по которому вы сумеете самостоятельно установить и настроить сервер apache, который поддерживает соединение по протоколу http/2, использует php-fpm и MPM event. На данный момент времени это одна из самых стабильных, и эффективных конфигураций apache, которые можно использовать на рабочем сервере.

Если вы хотите отблагодарить автора за его труд — я могу порекомендовать хороший хостинг для ваших VPS — https://firstvds.ru/
При покупке сервера вы можете использовать промокод 648341969 . Вы получите скидку и отблагодарите меня за счет реферальной программы. Хостинг хороший и надежный. Только выбирать надо сервера с SSD дисками.

В качестве операционной системы выберем CentOS.

Начало установки

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

Далее детально мы описываем сам процесс, следуя которому, вы сумеете полностью настроить VPS для использования в качестве оптимизированного рабочего вебсервера.

Начинаем с обновления установленной системы CentOS.

yum update

Для дальнейшей работы нам понадобится утилита wget. Чаще всего она уже установлена, но в минимальном варианте CentOS ее может не быть. Поэтому поставьте ее (или убедитесь что она уже установлена).

yum install wget

Теперь нужно проверить – выключен ли selinux?

Эта проверка важна на физических серверах, виртуальных машинах и в системе виртуализации KVM. Если сервер OpenVZ, то можно даже не проверять – там selinux отключен по умолчанию.

Команда  sestatus показывает включен ли selinux.

Если включен — его надо отключить в файле: /etc/sysconfig/selinux
Найти строку и установить параметр:
SELINUX=disabledsestatus

Устанавливаем любимый файловый менеджер:

yum install mc

Устанавливаем локаль utf-8, чтобы корректно отображался русский шрифт и различные спец символы (в частности те, которые используются mc).

localectl set-locale LANG=en_US.UTF-8

На случай если подключение будет через локаль windows ubuntu и если локали не совпадут – то все переключится на ANSI кодировку. Локали должны совпадать. Поэтому убедитесь, что локаль вашей windows системы совпадает с локалью на сервере (по умолчанию в windows включается русская локаль). Установите одинаковые локали везде.

С windows компьютеров доступ к серверам привычно осуществляется с помощью программы Putty. Для удобного использования лучше создать ключи доступа.
генерируем ключ rsa:

ssh-keygen -t rsa
cd .ssh

если нет файла authorized_keys:

cp id_rsa.pub authorized_keys

Если такой файл есть:

cat id_rsa.pub >> authorized_keys

Не забываем установить права доступа на указанный файл:

chmod 600 authorized_keys

Забираем приватный ключ id_rsa к себе на локальный компьютер.

Самый простой способ – скопировать через буфер обмена себе на компьютер и создать новый файл с этим ключом.
Затем нужно будет преобразовать файл в формат, пригодный для использования программой putty. Если вы будете пользоваться системой bash на windows – можете обойтись без промежуточных преобразований.
Преобразование осуществляется программой puttygen.exe.
Получить саму программу putty и все сопутствующие утилиты можно по ссылке https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

Устанавливаем (или убеждаемся что они уже установлены) программы cronie и logrotate:

yum install cronie
yum install logrotate

Установка apache

Устанавливаем репозитарий epel. Полностью epel репозиторий называется так — Extra Packages for Enterprise Linux. Это хранилище пакетов, созданное группой специалистов операционной системы Fedora. Пакеты из epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.

yum install epel-release

Теперь установим репозитарий codeit для получения последних версий apache:

cd /etc/yum. repos.d
wget https://repo.codeit.guru/codeit.el`rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release)`.repo
yum install httpd mod_ssl

systemctl enable httpd
systemctl start httpd

Если у вас установлен firewall – конфигурируем его для открытия портов web сервера:

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

делаем рестарт сервера

apachectl restart

На случай если получаем сообщение по типу httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName при перезапуске httpd (сервера апача), идем и в файле /etc/httpd/conf/httpd.conf

ищем вот эти строки:

ищем вот эти строки:
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup. 
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName пишем сюда IP адрес сервера

После ServerName прописываем IP адрес нашего сервера.

В файле /etc/httpd/conf.modules.d/00-proxy.conf  лучше будет закомментировать этот модуль
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
Практически наверняка вы его не будете использовать.
А лишние подлюченные модули только создают проблемы.

Установка PHP

Если у вас уже был установлен php в виде модуля апача, то перед установкой php-fpm нужно будет удалить предыдущие версии php:
yum remove mod_php* php*

Для установки новой версии php в CentOS приходится использовать сторонний репозитарий.

Для CentOS на выбор есть два популярных репозитария: webtatic и Remi. После некоторого тестирования и реального использования в боевом сервере репозитарий от Remi показал себя наиболее полным и стабильно поддерживаемым. Поэтому при выборе репозитария я советую использовать Remi.

Если хотите установить из репозитария webtatic (Сайт проектка https://webtatic.com/), инструкция здесь:

Команда установки:

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum install php72w-fpm php72w-opcache php72w-cli php72w-gd php72w-mbstring php72w-mcrypt php72w-mysqlnd php72w-xml php72w-soap php72w-xmlrpc

Если устанавливать через репозитарий Remi, то инструкция такая:

wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7*.rpm
yum install yum-utils

Выбираем какую версию php будем устанавливать:

yum-config-manager --enable remi-php72

Теперь ставим PHP:

yum install php-fpm php-opcache php-cli php-gd php-mbstring php-mcrypt php-mysqlnd php-xml php-soap php-xmlrpc

После установки php-fpm надо будет еще правильно его настроить. Идеи настройки были взяты из руководства https://www. stephenrlang.com/2018/02/centos-7-apache-2-4-with-php-fpm/ и доработаны для стабильной работы в условиях боевого сервера. К сожалению, если полностью скопировать настройки оттуда – сервер ведет себя нестабильно.

Создаем файл /etc/httpd/conf.d/php.conf со следующим содержимым:

# Tell the PHP interpreter to handle files with a .php extension
# Proxy declaration
<Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm">
	ProxySet disablereuse=on connectiontimeout=10 timeout=60
</Proxy>
# Redirect to the proxy
<FilesMatch \.php$>
	SetHandler proxy:fcgi://php-fpm
</FilesMatch>
#
# Allow php to handle Multiviews
#
AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
#
# Uncomment the following lines to allow PHP to pretty-print .phps
# files as PHP source code:
#
#<FilesMatch \. phps$>
#	SetHandler application/x-httpd-php-source
#</FilesMatch>
#<LocationMatch "/status">
#  SetHandler proxy:fcgi://php-fpm
#</LocationMatch>

#ProxyErrorOverride on

Директива ProxyErrorOverride on нужна для нормальной работы кастомных ошибок, которые настраиваются через htaccess в каждом сайте с помощью директивы ErrorDocument 404. Нужно учитывать, что в этом случае вместо 500 ошибок так же будет выводиться кастомная страница или стандартное сообщение об ошибке Apache. Если для написания сайта используется php фреймворк (например Laravel или Joomla) лучше оставить директиву ProxyErrorOverride отключенной – иначе сайт может работать неверно (например не будет работать перевод сайта в offline). Связано это с действием директив php throw. В том случае, если вы пишите сайт на голом php – возможно включение этой директивы поможет вам в работе. Ее можно включить на уровне виртуальных хостов (и это самый лучший способ так сделать).

Теперь приступаем к редактированию файла /etc/php-fpm.d/www.conf 

Ищем в нем строку listen = 127.0.0.1:9000, закрываем ее комментарием и добавляем строки, которые указаны ниже. В итоге должно получиться вот так:

listen = /var/run/php-fpm/default.sock
listen.allowed_clients = 127.0.0.1
listen.owner = apache
listen.group = apache
listen.mode = 0660
user = apache
group = apache

Если вы хотите чтобы в apache логи php-fpm разбивались индивидуально по сайтам, а не сваливались в одну кучу в одном файле, нужно будет закомментировать еще две строки в этом же файле (/etc/php-fpm.d/www.conf):

;php_admin_value[error_log] = /var/log/php-fpm/www-error.log
;php_admin_flag[log_errors] = on

Если есть экзотическое желание заставить работать страницы .html как .php (чтобы в них могли исполняться php скрипты), то придется исправить еще одну строку в этом файле:

security. limit_extensions = .php .html

Здесь мы добавляем расширение .html для того, чтобы в нем могли исполняться php скрипты.

Директории для сессий при установке php могут быть не созданы. Проверьте в конце файла наличие строк:

php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache

и если необходимо — создайте эти подкаталоги:

mkdir /var/lib/php/session
mkdir /var/lib/php/wsdlcache

Теперь проверим что конфигурационный файл php-fpm корректен:

php-fpm -t

Если надо установить отладку (учтите что для версии php 7.3 пока еще отладка не доступна), установите пакет rpm php72w-pecl-xdebug (не делайте этого на рабочем сервере! – это только дома для тестирования!):

yum  install php72w-pecl-xdebug

Пишу еще раз! Не устанавливайте xdebug на продакшен сервере! Это только для домашнего тестирования и отладки!

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

systemctl enable php-fpm
systemctl start php-fpm

Продолжаем настройку PHP –  в файле /etc/php. ini найдите эти параметры и исправьте на приведенные значения (или на те, которые вас устроят):

memory_limit = 256M
upload_max_filesize = 32M
post_max_size = 32M

Устанавливаем MariadDB вместо MySQL

cd /etc/yum.repos.d/ 

echo "# MariaDB 10.3 CentOS repository list - created 2018-10-22 16:03 UTC" > MariaDB.repo
echo "# http://downloads.mariadb.org/mariadb/repositories/" >> MariaDB.repo
echo "[mariadb]" >> MariaDB.repo
echo "name = MariaDB" >> MariaDB.repo
echo "baseurl = http://yum.mariadb.org/10.3/centos7-amd64" >> MariaDB.repo
echo "gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB" >> MariaDB.repo
echo "gpgcheck=1" >> MariaDB.repo

yum install MariaDB-server MariaDB-client
systemctl start mariadb
systemctl enable mariadb

Теперь выполним настройки безопасности MySQL и установим пароль доступа к ней. Запускаем команду:

mysql_secure_installation

Когда будет задан вопрос о root пароле, то устанавливаем его. На остальные вопросы просто жмем Enter.

После выполнения этой процедуры лучше разрешить подключение к mysql только через локальные подключения.

В конфигурационном файле /etc/my.cnf.d/server.cnf в разделе [mysqld] раскомментируем строку bind-address и задаем значение 127.0.0.1:
bind-address=127.0.0.1

Полезная утилита zip для разархивирования установщиков скриптов:

yum install unzip

Нужно создать папку для сайта с именем 000-default в директории /var/www/html . Затем создать из нее сайт.
Это на случай, если кто-то решит воспользоваться плохим конфигурированием вашего сервера. По умолчанию для сайтов, которые не существуют на вашем сервере, нужно возвращать 403 код ошибки. Иначе, по вашей ошибке или по злому намерению других людей, возможно создание дублей ваших сайтов.

Установка certbot на CentOS

yum install python2-certbot-apache

Настройка редактора по умолчанию

Если вы будете менять crontab, то лучше поменять vim (стандартный редактор, установленный по умолчанию)  на что-то более удобоваримое, например, редактор nano или стандартный редактор mc — mcedit.
Если выберете nano – вначале убедитесь что он установлен:

yum install nano

Затем в файле .bashrc  добавить строку в конце

export EDITOR=nano

или

export EDITOR=mcedit

В зависимости от выбранного редактора. (Я советую mcedit — он проще)

Установка времени

Изменим время на московское:

mv /etc/localtime /etc/localtime.bak
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Генерируем самоподписанный сертификат SSL на 10 лет:

openssl req -new -days 3650 -x509 -nodes -out /etc/pki/tls/certs/localhost.crt -keyout /etc/pki/tls/private/localhost.key

Указываем только страну, остальное Enter.

Автоматическая установка с помощью скрипта

Можно выполнить автоматическую установку и настройку на чистый сервер CentOS 7 с помощью скрипта. Перед запуском скрипта убедитесь что у вас установлена утилита wget – выполните команду

yum install wget

Теперь скопируйте команду установки на свой сервер и запустите ее:

wget https://hika. su/ri.sh && chmod u+x ri.sh && ./ri.sh

Для удобного управления сервером можно использовать созданные заранее скрипты для MC. Загрузить их можно с сайта hika.su командой:

cd /etc/mc && mv mc.menu mc.menu.old && wget https://hika.su/mc.menu

Режимы работы PHP — Документация ISPmanager Lite

В ISPmanager можно включить возможность обработки PHP-скриптов для сайта. Для этого при создании или изменении WWW-домена включите опцию PHP и настройте его параметры. Подробнее см. в статье Создание WWW-домена.

Поддерживаются режимы работы PHP:

Подробнее о возможностях настройки PHP для режимов работы см. в статье Настройка PHP.

Модуль Apache


Особенности режима:

  • динамическое содержимое обрабатывает модуль PHP веб-сервера Apache;
  • настройки PHP указываются глобально и применяются для всех WWW-доменов пользователей с этим режимом. Изменить их может только администратор в Настройки web-сервера → PHP → Настройка;
  • можно выбрать только одну версию PHP для работы модуля, которая распространяется на всех пользователей ISPmanager;
  • наиболее быстрый из режимов Apache. По скорости уступает только «FastCGI (Nginx + PHP-FPM)».

Чтобы использовать режим:

  1. Установите Apache-MPM-ITK или Apache MPM-Prefork, Модуль PHP. Подробнее см. в статье Установка веб-сервера.
  2. Включите в Учётные записи → Пользователи → Изменить опцию Может использовать PHP как модуль apache.
  3. Выберите режим при создании или изменении WWW-домена. Подробнее см. в статье Создание WWW-домена.

При выборе этого режима в конфигурационном файле Apache для WWW-домена добавляются строки вида:

<FilesMatch "\.ph(p[3-5]?|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\. phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>
<IfModule php5_module>
    php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f <email администратора>"
    php_admin_value upload_tmp_dir "/var/www/www-root/data/mod-tmp"
    php_admin_value session.save_path "/var/www/www-root/data/mod-tmp"
    php_admin_value open_basedir "/var/www/www-root/data:."
</IfModule>
<IfModule php7_module>
    php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f <email администратора>"
    php_admin_value upload_tmp_dir "/var/www/www-root/data/mod-tmp"
    php_admin_value session.save_path "/var/www/www-root/data/mod-tmp"
    php_admin_value open_basedir "/var/www/www-root/data:."
</IfModule>

<IfModule php5_module>
    php_admin_flag engine on
</IfModule>
<IfModule php7_module>
    php_admin_flag engine on
</IfModule>

CGI


Особенности режима:

  • динамическое содержимое обрабатывает Apache в режиме CGI;
  • настройки PHP указываются индивидуально для каждого пользователя. Изменить их может пользователь в WWW → PHP → Настройка;
  • для каждого WWW-домена, работающего в этом режиме, можно выбрать версию PHP;
  • самый медленный режим работы.

Чтобы использовать режим:

  1. Установите Apache-MPM-ITK или Apache MPM-Prefork. Подробнее см. в статье Установка веб-сервера.
  2. Включите в Учётные записи → Пользователи → Изменить опцию Может использовать PHP в режиме CGI.
  3. Выберите режим при создании или изменении WWW-домена. Подробнее см. в статье Создание WWW-домена.

При выборе этого режима в конфигурационном файле Apache для WWW-домена добавляются строки:

<FilesMatch "\.ph(p[3-5]?|tml)$">
    SetHandler application/x-httpd-php5
</FilesMatch>
ScriptAlias /php-bin/ /var/www/php-bin-isp-php52/<владелец WWW-домена>/
AddHandler application/x-httpd-php5 . php .php3 .php4 .php5 .phtml
Action application/x-httpd-php5 /php-bin/php

FastCGI (Apache)


Особенности режима:

  • динамическое содержимое обрабатывает Apache в режиме FastCGI;
  • настройки PHP указываются индивидуально для каждого пользователя. Изменить их может пользователь в WWW → PHP → Настройка;
  • для каждого WWW-домена, работающего в этом режиме, можно выбрать версию PHP;
  • по скорости работы уступает «Модуль Apache» и «FastCGI (Nginx + PHP-FPM)», но превышает «CGI».

Чтобы использовать режим:

  1. Установите Apache MPM-Prefork и Модуль PHP. Подробнее см. в статье Установка веб-сервера.
  2. Включите в Учётные записи → Пользователи → Изменить опцию Может использовать PHP в режиме FastCGI (Apache).
  3. Выберите режим при создании или изменении WWW-домена. Подробнее см. в статье Создание WWW-домена.

При выборе этого режима в конфигурационном файле Apache для WWW-домена добавляются строки:

<FilesMatch "\. ph(p[3-5]?|tml)$">
    SetHandler fcgid-script
    FCGIWrapper /var/www/php-bin/<владелец WWW-домена>/php
</FilesMatch>

Options +ExecCGI

FastCGI (Nginx + PHP-FPM)


Особенности режима:

  • динамическое содержимое обрабатывает PHP-FPM;
  • настройки PHP указываются индивидуально для каждого пользователя. Изменить их может пользователь в WWW → PHP → Настройка;
  • каждый пользователь ISPmanager может выбрать версию PHP для своих WWW-доменов, работающих в этом режиме;
  • PHP-FPM не поддерживает правила .htaccess;
  • самый быстрый режим работы.

Чтобы использовать режим:

  1. Установите Nginx, PHP-FPM FastCGI. Подробнее см. в статье Установка веб-сервера.
  2. Включите в Учётные записи → Пользователи → Изменить опцию Может использовать PHP в режиме FastCGI (Nginx + PHP-FPM).
  3. Выберите режим при создании или изменении WWW-домена. Подробнее см. ((?U).+\.ph(?:p\d*|tml))(/?.+)$;
    try_files $uri =404;
    include fastcgi_params;

    Разница между режимами, PHP-FPM, CGI, FastCGI, модуль Apache

    Часто приходится объяснять клиентам что за режимы работы PHP для сайтов.  Знаете, в настройках той же панельки ISPmanager Lite 5 имееются такие.   И еще люди говорят — вот, там же PHP 7 — а ты впариваешь свой php-fpm, который только версии 5.4 или 5.6.  И они не понимают, что режим работы гораздо важнее для производительности, чем просто версия PHP.

    Я выдернул свой этот пост с форума webmasters, где когда-то давно расписывал за режимы.   Немного дополнил его скринами, о том как включить режимы в панели ISPmanager Lite 5

    PHP 7  в режиме CGI

    На самом деле в режиме CGI  php 7 теряет все свои преимущества, потому что CGI это в разы менее производительный режим работы PHP.  Чтобы иметь преимущества php 7 его нужно обновить общесистемный. Тогда и высокопроизводительный сервис PHP-fpm станет работать на этой же версии.  Но чего делать пока не рекомендуется, да и нету его еще в стабильных репозиториях большинства OS. Вкорячить можно, но откатить  потом будет гораздо сложней, если что-то отвалится.

    Режимы работы PHP-CGI  и модуль Apache

    Fastcgi в принципе то же самое что и php-fpm, но есть существенная разница. CGI — тоже оно, но не совсем. Давайте начнём с CGI и чем он отличается от обычного Apache по-умолчанию. Апач с mod_php исполняет php-код сам, отъедая при этом кучу ресурсов и делая это внутри своих процессов.

    Когда используется режим CGI — это значит апач не обрабатывает php сам, а запускает php-cgi для каждого php-скрипта и забирает у него результат обработки.
    Т.е по сути это даже несколько усложняет схему: пользователь шлёт запрос к nginx > тот обращается к apache > апач запускает скрипты через cgi и получает результат их выполнения > собирает из них html и отдаёт его nginx > тот собирает всю статику, нужную для этой html страницы в кучу > отдает пользователю.

    Режим fastcgi

    Fastcgi это тот же cgi, но отличается от него тем, что оно позволяет апачу не запускать для каждого скрипта отдельный процесс, а запустить один или несколько процессов и отдавать скрипты ему, получать от него ответ. Это немного производительнее, чем cgi, засчёт того, что операции создания процессов для ОС считаются довольно ресурсоемкими. Но в этой схеме всё тот же apache. fastcgi без апача в данном случае работать не может, это все равно модуль mod_fastcgi.

    PHP-fpm  — или как он указывается в ISPmanager —  Nginx+PHP-FPM

    php-fpm — это fastcgi process manager. Он представляет из себя отдельную службу, которая работает независимо от какого-либо вебсервера. Он может сам принимать запросы от вебсервера через unix-сокет или через сетевое соединение. Другими словами, вы можете держать сайты на одном сервере, а php-скрипты исполнять на другом.

    И в этом случае, апач становится не нужен, потому как nginx может работать с php-fpm сам, напрямую. Апач тоже может работать в таком же режиме с php-fpm, но это не имеет смысла. php-fpm не может отдавать статические файлы или html, он может только исполнять php. получается такая схема: запрос пользователя > nginx > php-fpm >nginx, он собирает из ответа php и статики страницу > отдаёт пользователю. FPM в разы производительнее apache, в каком бы режиме тот ни был запущен.

    Настройка в ISPmanager

    Теперь, что касается ISP. Тот режим, о котором я говорю — nginx+php-fpm — доступен только в ISP manager 5-й версии.

    Сначала нужно включить и установить нужный софт через «Возможности»

    Примерно вот так выглядят настройки в этом режиме.

     

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

    И только теперь эти режимы станут доступны для сайта этого пользователя:

     

    Вкратце о различиях режимов работы панели также можете посмотреть в документации ISP.

    При этом, сменять на ходу на этот режим через ISP следует с осторожностью, ибо можно потерять всю текущую конфигурацию сайтов на VPS — она будет заменена на новую, и если сайты с ней не заработают, и если в нее вносили раньше изменения, то переключить обратно так легко уже не получится.

    В ISP 4 этого режима вообще нет, поэтому там можно настроить это только вручную, без ISP, и то, если будете после этого вносить изменения в конфиги сайтов через панель, все настройки слетят к ISP-шным, т.е на апач.

    Php-fpm запуск от пользователя на apache2

    Проверено на ubuntu 20.04.1

    Очень удобно иметь дело с сайтом если можно сохранять и редактировать файлы от своего пользователя, а не от www-data который ставится по умолчанию.
    При работе с mod-php+mpm-prefork это делает mpm-itk, а для работы в конфигурации php-fpm+mpm-event нужны специальные настройки о которых я сейчас расскажу.
    Преимущества php-fpm+mpm-event в большей производительности и в возможность работы с http2.

    1. Надо выключить mod-php+mpm-prefork+mpm-itk если он был установлен и включить php-fpm+mpm-event.

      a2dismod php7.3
      a2dismod mpm_itk
      a2dismod mpm_prefork
       
      a2enmod rewrite
      a2enmod mpm_event
      a2enmod proxy_fcgi setenvif
      a2enconf php7.3-fpm.conf
      a2enmod http2
       
      systemctl restart apache2 
      systemctl restart php7.3-fpm
    2. Создаем пуул для своего пользователя. 1. копируем файл /etc/php/7.3/fpm/pool.d/www.conf с именем своего сайта например jura12.conf. 2. меняем там 3 вещи. 2.1. название пула с [www] на [jura12]. 2.2. имя пользователя и группы с user = www-data group = www-data на своего пользователя username и свою группу username. 2.3. имя файла listen = /run/php/php7.3-fpm.sock на php7.3-fpm-jura12.sock

    3. Теперь в теле своего сайта /etc/apache2/sites-enabled/jura12.ru-le-ssl.conf в разделе Virtualhost добавляем строки:

      <FilesMatch ".+\.ph(ar|p|tml)$">
              SetHandler "proxy:unix:/run/php/php7.3-fpm-jura12.sock|fcgi://localhost"
      </FilesMatch>

      обратите внимание на имя файла sock. оно должно быть таким каким мы его поменяли ранее.

    4. Теперь можно создавать папку для сайта с правами пользователя. например

      sudo mkdir /var/www/dirofmysite
      sudo chown username:username /var/www/dirofmysite
    5. Далее рестартуем сервисы.

      sudo systemctl restart php7.3-fpm
      sudo systemctl restart apache2
    6. безопасность. поскольку включается mod_proxy то лучше обезопасить его использование локальной сетью. иначе могут использовать ваш сервер. для этого надо в /etc/apache2/mods-enabled/proxy.conf добавить строки:

      <Proxy *>
         Require all denied
         Require local
         Require ip 192.168.1
      </Proxy>

    Ссылки

    Apache 2.4 + PHP-FPM + ProxyPassMatch

    Это работает с WordPress 5.1.1 и новее вместе с PHP 7.3, FastCGI, прокси, а также MariaDB / MySQL. Проверено дважды на моих серверах. Работает как шарм.

    Сначала на CentOS / Fedora / Red Hat

    sudo yum remove php*
    sudo yum --enablerepo=extras install epel-release
    sudo yum install php-fpm php-mysql php-gd php-imap php-mbstring 
    sudo grep -E '(proxy. so|fcgi)' /etc/httpd/conf.modules.d/00-proxy.conf
    sudo mv /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.conf_bak
    

    Отредактируйте этот файл:

    sudo nano /etc/php-fpm.d/www.conf
    

    Вставьте это:

    [www]
    
    ; The address on which to accept FastCGI requests.
    ; Valid syntaxes are:
    ;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on
    ;                            a specific port;
    ;   'port'                 - to listen on a TCP socket to all addresses on a
    ;                            specific port;
    ;   '/path/to/unix/socket' - to listen on a unix socket.
    ; Note: This value is mandatory.
    listen = 127.0.0.1:9000
    listen = /run/php-fcgi.sock
    
    sudo ll /run/php-fcgi.sock
    

    Должен дать srw-rw-rw-.

    Или как настроить на Debian / Ubuntu

    Руководство:

    источник: https://emi.is/?page=articles&article=php-7-installation-and-configuration-for-apache-2.4-using-php-fpm-(debian,-repository)


    sudo apt purge 'php*' or sudo apt-get purge 'php*'
    sudo add-apt-repository ppa:ondrej/php
    sudo apt-get update
    sudo apt install php7. 3 php7.3-fpm php-mysql php-mbstring php-gd php-imap libapache2-mod-security2 modsecurity-crs
    systemctl status php7.3-fpm
    systemctl stop php7.3-fpm.service
    
    sudo a2dismod php7.0 php7.1 php7.2 mpm_event mpm_worker
    sudo a2enmod mpm_prefork
    sudo a2enmod php7.3
    sudo systemctl restart apache2 (httpd in CentOS)
    

    Проблема в том, что php 7.3 из репозитория Ondrej работает только в режиме mpm_prefork. У него есть git repo, так что вы можете найти его в сети и спросить его, сделает ли он php 7.3 для mpm_worker и mpm_event. Остальная конфигурация для дистрибутивов семейства Debian приведена ниже:


    sudo apt --assume-yes install php7.3-fpm
    sudo systemctl stop php7.3-fpm.service
    sudo rm /var/log/php7.0-fpm.log
    sudo mkdir /var/log/php7.3-fpm/
    sudo touch /var/log/php7.3-fpm/error.log
    sudo mkdir /var/log/php7.3/
    sudo touch /var/log/php7.3/error.log
    sudo mkdir /var/tmp/php7.3/
    sudo > /etc/php/7.3/fpm/php.ini
    sudo > /etc/php/7.3/fpm/php-fpm.conf
    sudo rm /etc/php/7. 3/fpm/pool.d/www.conf
    sudo touch /etc/php/7.3/fpm/pool.d/example.com.conf
    sudo useradd --comment "PHP" --shell "/usr/sbin/nologin" --system --user-group php
    
    sudo nano /etc/php/7.3/fpm/php.ini
    

    вставить


    [PHP]
    date.timezone = Europe/Prague
    display_errors = Off
    error_log = /var/log/php7.3/error.log
    error_reporting = 32767
    log_errors = On
    register_argc_argv = Off
    session.gc_probability = 0
    short_open_tag = Off
    upload_tmp_dir = /var/tmp/php7.3/
    

    sudo nano /etc/php/7.3/fpm/php-fpm.conf
    

    вставить


    [global]
    error_log = /var/log/php7.3-fpm/error.log
    include = /etc/php/7.3/fpm/pool.d/*.conf
    

    sudo nano /etc/php/7.3/fpm/pool.d/example.com.conf
    

    вставить


    [example.com]
    group = php
    listen = 127.0.0.1:9000
    pm = ondemand
    pm.max_children = 5
    pm.max_requests = 200
    pm.process_idle_timeout = 10s
    user = php
    

    sudo nano /etc/logrotate. /(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/example.com/public_html
    
        <Directory /var/www/html/example.com/public_html>
            Options Indexes FollowSymLinks Includes IncludesNOEXEC SymLinksIfOwnerMatch
            AllowOverride None
        </Directory>
    </VirtualHost>
    

    Затем включите сайт:

    sudo a2ensite /etc/apache2/sites-available/example.com.conf
    

    Затем отредактируйте сайт SSL (в данном случае certbot из Let’s Encrypt был установлен и настроен ранее в начале настройки SSL-сертификата).

    sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf
    
    <IfModule mod_ssl.c>
        #headers for security man in the middle attack find how to enable this mod in Google
        LoadModule headers_module modules/mod_headers.so
        <VirtualHost *:443>
            Header always set Strict-Transport-Security "max-age=15768000"
            SSLEngine On
            ServerName example.com
            ServerAdmin admin@example. \.ht">
        Require all denied
        </FilesMatch>
    
        <files readme.html>
           order allow,deny
           deny from all
        </files>
    
    </VirtualHost>
        #Stapling OCSP for Let's Encrypt certs.
        SSLUseStapling          on
        SSLStaplingResponderTimeout     5
        SSLStaplingReturnResponderErrors        off
        SSLStaplingCache        shmcb:/var/run/ocsp(128000)
    </IfModule>
    

    sudo a2enmod proxy proxy_fcgi setenvif
    sudo systemctl reload apache2.service
    sudo chown --recursive root:adm /etc/php/
    sudo chmod --recursive 0770 /etc/php/
    sudo chown --recursive php:adm /var/log/php7.3/
    sudo chown --recursive php:adm /var/log/php7.3-fpm/
    sudo chmod --recursive 0770 /var/log/php7.3/
    sudo chmod --recursive 0770 /var/log/php7.3-fpm/
    sudo chown --recursive php:php /var/tmp/php7.3/
    sudo chmod --recursive 0770 /var/tmp/php7.3/
    sudo a2enconf php7.3-fpm
    sudo systemctl enable php7.3-fpm.service
    sudo systemctl start php7.3-fpm.service
    

    Не забудьте добавить порт 9000 в брандмауэр в Debian / Ubuntu

    sudo ufw allow 9000/tcp
    sudo ufw status
    

    On CentoOS / Fedora / Red Hat

    sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
    sudo firewall-cmd --reload
    sudo firewall-cmd --list-all
    sudo firewall-cmd --state 
    

    Оптимизация производительности Apache2 и php fpm — Пошаговое руководство | Себастьян Бакпеш

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

    Моя среда

    1. Рассчитайте размер процесса

    Вам необходимо знать, сколько процессов может выполняться на вашем компьютере.Поэтому необходимо рассчитать размер процесса ваших основных драйверов ЦП / памяти.

    Есть несколько методов расчета. Лично я предпочитаю этот скрипт python, поскольку он учитывает общую память и дает представление о реальном использовании памяти.

     cd ~ 
    wget https://raw.githubusercontent.com/pixelb/ps_mem/master/ps_mem.py
    chmod a + x ps_mem.py
    sudo python ps_mem.py

    ps_mem.py выдаст следующий результат:

    Здесь вы можете видеть, что существует 30 процессов apache2, которые в общей сложности потребляют 139 МБ, поэтому каждый процесс Apache использует примерно 5 МБ ОЗУ.Процесс php-fpm5.6 будет использовать около 50 МБ.

    2. Вычислить apache MaxRequestWorkers

    Однако в целях безопасности я зарезервирую 15% памяти для всех других процессов (в моем случае ~ 2,4 ГБ) и округлю размер процесса apache до 5 МБ.

     MaxRequestWorkers = (Общий объем ОЗУ - используемая память  для  Linux, БД и т. Д.) / Размер процесса 
    MaxRequestWorkers = (16384 МБ - 2400 МБ) / 5 МБ = 2800

    3. Вычислить php-fpm max-children

    Будет безопасно, я зарезервирую 1 ГиБ для всех других процессов и округлю размер процесса php до 55 МБ.

     maxclients = (Общий объем RAM - используемая память  для  Linux, DB и т. Д.) / Размер процесса 
    maxclients = (16384MB - 2400MB) / 55MB = 256

    Мой коллега Томас Хервег подготовил эту таблицу Excel для расчета: https : //s3.buckpesch.io/downloads/apache_performance.xlsx

    В файле /etc/apache2/mods-enabled/mpm-event.conf или /etc/apache2/mods-enabled/mpm-worker.conf файл:

      
    ServerLimit (Общий объем ОЗУ - используемая память для Linux, DB и т. Д.) / размер процесса
    StartServers (количество ядер)
    MinSpareThreads 25
    MaxSpareThreads 75
    ThreadLimit 64
    ThreadsPerChild 25
    MaxRequestWorkers (общий объем ОЗУ - используемая память для Linux, DB и т. д.) / размер процесса
    MaxConnectionsPerChild 1000

    Обратите внимание, что настройки по умолчанию не содержат «ServerLimit», поэтому я добавил его сюда.

    В каталоге /etc/php/7.1/fpm/pool.d/www.conf измените следующие настройки:

     pm = динамический 
    pm.max_children (общий объем RAM - (БД и т. д.) / размер процесса)
    pm.start_servers (ядра процессора * 4)
    pm.min_spare_servers (ядра процессора * 2)
    pm .max_spare_servers (ядра процессора * 4)
    pm.max_requests 1000

    Чтобы узнать обо всех настройках php-fpm, я рекомендую посмотреть видео на этой странице: https://serversforhackers.com/c/php-fpm-process-management

    Мои окончательные настройки

    Мой сервер имеет 16 ГБ ОЗУ и 4 ЦП по 2,4 ГГц.Мой средний процесс apache имеет 5 МБ, средний процесс PHP занимает 55 МБ.

    /etc/apache2/mods-available/mpm_event.conf

     # Оптимизированные настройки для ср.  процесс apache 15 МБ и сервер AWS EC2 m4.xlarge 

    ServerLimit 2800
    StartServers 4
    MinSpareThreads 25
    MaxSpareThreads 75
    ThreadLimit 64
    ThreadsPerChild 25
    MaxRequestWorkers 9000/130013 MaxRequestWorkers 2800/
    /2000/900/900 / XP php / 7.1 / fpm / pool.d / www.conf

    ; Оптимизирован для запроса php-fpm размером 55 МБ на AWS EC2 m4.xlarge (4 ядра ЦП, 16 ГБ ОЗУ) 
    pm = динамический
    pm.max_children = 256
    pm.start_servers = 20
    pm.min_spare_servers = 10
    pm.max_spare_servers = 20
    pm.max_requests = 1000

    Сохраните настройки и перезапустите процессы apache и php-fpm

     sudo service apache2 restart 
    sudo service php7.1-fpm restart

    Проверьте свои настройки

    Чтобы проверить настройки сервера, вы можете запустить Apache Bench протестирует и посмотрите, как ваш сервер ведет себя в htop .

    Откройте 2 терминала и выполните следующую команду для проверки 5000 запросов с одновременным выполнением 100 параллельных запросов:

     ab -n 5000 -c 100 

    Нагрузочный тест с использованием apache bench

    Улучшение процесса моделирования (предложено zzzplayer)

    Одно предложение Я также могу сказать читателям, чтобы они запускали «ps_mem» до и * быстро после * смоделированного стенда Apache (* быстро после *, потому что процесс удалит незанятые дочерние процессы). Это отобразит точное количество дочерних процессов до и после смоделированной рабочей нагрузки как для Apache, так и для PHP-FPM.

    «htop» не отображает такое точное количество дочерних процессов как из Apache, так и из PHP-FPM.

    Запуск и «ps_mem», и «htop» - это нормально, но запуск «ps_mem» более важен, потому что цель статьи - убедиться, что дочерние процессы Apache и PHP-FPM увеличиваются по мере увеличения рабочей нагрузки.

    Надеюсь, это поможет. Напишите мне, когда у вас появится другой опыт или вы думаете, что я могу улучшить свою формулу / расчет. Также я мог бы создать простой веб-интерфейс для расчета настроек… Но теперь мне нужно вернуться к работе 😉

    Как установить и настроить FastCGI и PHP-FPM на CentOS 8

    Обновлено

    , автор: Linode Community

    Traducciones al Español

    Estamos traduciendo nuestros guías y tutoriales al Español. Es posible que usted esté viendo una traducción generada automáticamente. Estamos trabajando con traductores profesionales para verificar las traducciones de nuestro sitio web. Este proyecto es un trabajo en curso.

    mod_fcgid - это
    Модуль Apache, использующий
    Протокол FastCGI для обеспечения интерфейса между Apache и программами Common Gateway Interface (CGI). CGI помогает веб-серверу создавать и обрабатывать динамическое содержимое для языков сценариев, таких как PHP. Эта динамическая функция обычно используется при запуске систем управления контентом, таких как WordPress, на стеке LAMP.

    Это руководство покажет вам, как установить mod_fcgid и PHP-FPM на CentOS 8. Он также предоставит базовую конфигурацию, которая использует соединения на основе сокетов вместо TCP. Эти шаги позволят вам запустить PHP через mod_fcgid . Запуск PHP через mod_fcgid помогает уменьшить количество используемых системных ресурсов, заставляя веб-сервер действовать как прокси и передавать в PHP-FPM только файлы с расширением . php .Кроме того, использование PHP-FPM позволяет настроить каждый виртуальный хост для запуска кода PHP от имени отдельных пользователей.

    Это руководство предполагает, что вы знакомы с настройкой
    Стек LAMP в CentOS 8. Если вы новичок в администрировании серверов Linux, возможно, вам будет интересно прочитать наши
    Руководство по основам системного администрирования Linux.

    Перед началом работы

    1. Выполните шаги, указанные в
      Как установить стек LAMP в CentOS 8. После заполнения руководства по стеку LAMP у вас должна быть конфигурация виртуальных хостов Apache для вашего собственного веб-сайта.В этом руководстве сайт по-прежнему будет называться example.com .

      Примечание

      В примерах этого руководства будет использоваться PHP версии 7.3. При выполнении команд, связанных с PHP, убедитесь, что вы заменили все номера версий на версию PHP вашей собственной системы.

    Установка mod_fcgid и PHP-FPM

    В этом разделе вы установите модули mod_fcgid и PHP-FPM на свой CentOS 8 Linode.

    1. Обновите свою систему, если вы еще этого не сделали, и установите утилиту командной строки wget .

        sudo yum update && sudo yum install wget -y
        
    2. Установить mod_fcgid и PHP-FPM :

        sudo yum install mod_fcgid php-fpm
        
    3. Проверьте правильность конфигурации:

        sudo httpd -t
        
    4. Перезапустите веб-сервер Apache:

        sudo systemctl restart httpd
        

    Настройте Apache с помощью PHP-FPM

    Теперь вы настроите Apache для передачи всех запросов файлов с помощью .\ s * слушайте \ s * = \ s * [a-zA-Z /] + '/etc/php-fpm.d/www.conf

    Вы должны увидеть следующий результат:

      listen = /var/run/php-fpm/www.sock 
     

    Если вы видите приведенный выше вывод, перейдите к шагу 6, в противном случае перейдите к следующему шагу, чтобы вручную настроить сокеты UNIX.

  4. Если выходные данные не возвращаются, вам необходимо отредактировать
    Файл конфигурации пула PHP, добавив параметр listen с адресом для приема запросов FastCGI. Добавьте строку в файл примера.

    Файл: /etc/php-fpm.d/www.conf
      1
    2
      
      слушать = /var/run/php-fpm/www.sock
          
  5. Если listen = 127.0.0.1:9000 еще не раскомментирован, сделайте это сейчас:

    Файл: /etc/php-fpm.d/www.conf
      1
    2
      
      listen.allowed_clients = 127.0.0.1
          
  6. Перезапустите демон php-fpm , чтобы изменения вступили в силу.

      sudo systemctl перезапустить php-fpm
      
  7. С помощью текстового редактора по вашему выбору обновите файл конфигурации Apache по умолчанию со следующими базовыми настройками для mod_fcgid . Вы можете рассмотреть
    изменение этих настроек в соответствии с вашими потребностями.

    Файл: / etc / httpd / conf / httpd.конф
      1
    2
    3
    4
    5
    6
      
      AddHandler fcgid-скрипт .fcgi .php .fpl
    FcgidConnectTimeout 20
    FcgidMaxRequestLen 268435456
    FcgidMaxProcessesPerClass 10
    FcgidIOTimeout 300
            
  8. Проверьте наличие ошибок конфигурации.

      sudo httpd -t
      
  9. Отредактируйте файл конфигурации модуля FastCGI, чтобы добавить настройки в файл примера.

    Файл: /etc/httpd/conf.modules.d/10-fcgid.conf
      1
    2
    3
    4
    5
    6
    7
    8
    9
      
      
      FcgidConnectTimeout 20
      Приложение AddType / x-httpd-php .php
      Приложение AddHandler / x-httpd-php .php
      Псевдоним / php7-fcgi / usr / lib / cgi-bin / php7-fcgi
       c>
        AddHandler fcgid-скрипт .fcgi
      
      
  10. Проверьте наличие ошибок конфигурации.

      sudo httpd -t
      
  11. Если вы получили Syntax OK для шагов 6 и 8, перезапустите службу Apache:

      sudo systemctl restart httpd
      
  12. Проверьте, работает ли PHP, создав и открыв страницу с отображаемым phpinfo () . Создайте файл info.php .

      sudo touch /var/www/html/example.com/public_html/info.php
      
  13. Открыть информацию .php с помощью редактора по вашему выбору и добавьте следующую строку:

    Файл: /var/www/html/example.com/public_html/info.php

    Перейдите к www.example.com/info .php для просмотра информации о вашей системе.

Настройка пулов PHP

PHP-FPM вводит концепцию
бассейны. С помощью пулов PHP-FPM может создавать пул процессов php для запуска файлов PHP из корневого каталога сайта и управлять им. Каждый пул, который запускается PHP-FPM, может запускаться с отдельными идентификаторами пользователя и группы.Пулы — отличный способ обеспечить большую безопасность, когда вы запускаете несколько сайтов на одном сервере. Выполнение сценариев PHP вашего сайта с использованием выделенных идентификаторов пользователей и групп означает, что ни один пользователь не может выполнять сценарии на всех сайтах, работающих на вашем Linode. В этом разделе вы создадите пул для домена example.com , который принадлежит пользователю bob .

Примечание Чтобы создать пример пользователя bob , вы можете выполнить шаги, описанные в нашем
Обеспечение безопасности вашего руководства пользователя.

  1. Создайте копию исходного файла пула, чтобы использовать ее в качестве основы для конфигурации пула example. com .

      sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/example.com.conf
      
  2. Отредактируйте файл, чтобы изменить имя сокета, пользователя и группу, а также адрес прослушивания сокета. Убедитесь, что адрес прослушивания отличается от адреса прослушивания, который вы установили в основном файле конфигурации пула PHP. Вы можете добавить имя своего сайта как часть имени файла, например, listen = / var / run / php-fpm / example.com.sock . Кроме того, убедитесь, что вы закомментировали или заменили любой существующий пользователь и группу и добавили собственные настройки пользователя и группы , как показано в примере.

    Файл: /etc/php-fpm.d/example.com.conf
      1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
      
     ; Создайте новый пул с именем «www».
    ; переменная $ pool может использоваться в любой директиве и будет заменена на
    ; название пула (здесь www)
    [пример. com]
    
    ...
    
    ; Пользователь Unix / группа процессов
    ; Примечание: пользователь является обязательным. Если группа не задана, группа пользователя по умолчанию
    ; будет использован.
    пользователь = боб
    группа = боб
    
    ...
    listen = /var/run/php-fpm/example.com.sock  
  3. Перезапустите процесс php7.3-fpm для создания нового пула.

      sudo systemctl перезапустить php-fpm
      
  4. Отредактируйте файл виртуального хоста example.com , чтобы использовать новый пул PHP-FPM.В зависимости от вашего текущего файла виртуальных хостов, то, что вам нужно добавить и отредактировать, может отличаться. Директива и ее содержимое — это то, что вы должны добавить в свой файл. Убедитесь, что вы заменили любой экземпляр example.com своим собственным доменным именем.

    Файл: /etc/httpd/sites-available/example.com.conf
      1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
      
       ru / public_html>
            Требовать все предоставлено
    
    
         ServerAdmin [адрес электронной почты защищен]
         ServerName example.com
         ServerAlias ​​www.example.com
         DocumentRoot /var/www/html/example.com/public_html
         ErrorLog /var/www/html/example.com/logs/error.log
         CustomLog /var/www/html/example.com/logs/access.log вместе
         DirectoryIndex index.php
         
             Параметры + ExecCGI
             FcgidConnectTimeout 20
             Приложение AddType / x-httpd-php./(.*\.php(/.*)?)$ "" unix: listen = /var/run/php-fpm/example.com.sock|fcgi://localhost/var/www/html/example. ru / public_html / "
         
      
  5. Проверьте файл конфигурации на наличие ошибок.

      sudo httpd -t
      
  6. Если ошибок не было, перезапустите Apache.

      sudo systemctl перезапустить httpd
      
  7. Используйте инструмент командной строки ps, чтобы убедиться, что PHP-FPM выполняет пример . com как пользователь и группа bob . Замените bob пользователем, которого вы определили в файле конфигурации пула.

      пс, доп. | grep 'example.com'
      

    Ваш вывод должен отображать bob в качестве пользователя, соответствующего команде, запустившей указанный процесс php-fpm: pool example.com .

      боб 30425 0,0 0,2 179588 10156? S 17:28 0:00 php-fpm: бассейн example.com
    Боб 30426 0.0 0,2 179588 10160? S 17:28 0:00 php-fpm: бассейн example.com
    боб 30427 0,0 0,2 179588 10160? S 17:28 0:00 php-fpm: бассейн example.com
    боб 30428 0,0 0,2 179588 10160? S 17:28 0:00 php-fpm: бассейн example.com
    боб 30429 0,0 0,2 179588 10160? S 17:28 0:00 php-fpm: бассейн example.com 
     

Эта страница изначально была опубликована на

PHP-FPM с Apache 2.2.22 и Ubuntu 12.10-500 Ошибка или возвращает текст (не выполняется)

Я следую этому руководству, чтобы попытаться установить PHP-FPM в свой стек LAMP.

Моя конфигурация в / etc / apache2 / sites-available / default содержит (согласно руководству)

  
        Псевдоним /php5.fastcgi /var/www/fastcgi/php5.fastcgi
        AddHandler php-скрипт .php
        FastCGIExternalServer /var/www/fastcgi/php5.fastcgi -socket /var/run/php-fpm.sock
        Действие php-script / php5.fastcgi виртуальный

# Эта часть не обязательна, чтобы заставить ее работать, но она предотвращает
# получен из него по ошибке или злонамеренно.
        <Каталог "/ var / www / fastcgi">
                Заказать разрешить, запретить
                <Файлы "php5.fastcgi">
                        Заказать отказать, разрешить
                
        

  

Что привело к 500 ошибкам. Я проверил журнал Apache и вижу:

(111) В соединении отказано: FastCGI: не удалось подключиться к серверу
«/ usr / lib / cgi-bin / php5-fcgi»: ошибка connect () FastCGIExternalServer
/ var / www / fastcgi / php5. fastcgi -socket /var/run/php-fpm.sock
FastCGI: неполные заголовки (0 байт) получены от сервера «/ usr / lib / cgi-bin / php5-fcgi»

Я проверил и понял, что мой /etc/php5/fpm/pool.d/www.conf прослушивает другое местоположение сокета (из учебника), поэтому я обновил конфигурацию apache до:

FastCGIExternalServer /var/www/fastcgi/php5.fastcgi -socket /var/run/php5-fpm.sock

Но теперь при посещении скрипта php5 отображается просто текст.

Я не уверен, где я ошибаюсь, может ли кто-нибудь указать мне правильное направление для устранения этой проблемы? К сожалению, все, что я нашел, очень ориентировано на NGINX (или пользователь просто полностью переключился на NGINX!) В данный момент я несколько привязан к Apache, так как полагаюсь на .htaccess для переписывания wordpress и постоянных ссылок и т. Д.

Заранее бесконечное спасибо.

конфигурационных профилей (пулов) Apache + php-fpm для vhosts

Я только что переключился с (apache + mpm_prefork) на (apache + php-fpm + mod_fastcgi), используя ссылки из

Переключение с prefork MPM на worker MPM + php-fpm в ubuntu
http: // www. garron.me/en/blog/ubuntu-lamp-apache2-mpm-worker-and-php-fpm.html

Ранее основная конфигурация apache была в

  /etc/apache2/apache2.conf
  

и конфигурация vhost была в

  /etc/apache2/sites-available/example1.com
/etc/apache2/sites-available/example2.com
/etc/apache2/sites-available/example3.com
/etc/apache2/sites-available/examplen.com
  

После перехода на php-fpm мне нужно создать профиль конфигурации (пул), например
1.high.conf, который должен быть установлен по умолчанию с такими настройками, как max_execution_time, memory_limit и другие, установлены на высокий . (Это для коммерческих сайтов drupal)
2. light.conf с меньшим значением настройки для легковесного обычного веб-сайта.

Можно ли создать только двух таких профилей (пулов) и назначить эти пулы сразу нескольким сайтам?
Могу ли я удалить вышеупомянутый старый файл конфигурации vhost или мне нужно будет указать в нем настройки, связанные с пулом?

Обновление: Это на VPS со стандартным пользователем / группой, такой как root, www-data и т. Д.а не для настройки виртуального хостинга с несколькими пользователями / группами.

Обновление 2 : после прочтения я попробовал кое-что, что могло бы сработать, пожалуйста, поправьте меня.
скопировано по умолчанию www.conf

  cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/light.conf

судо нано /etc/php5/fpm/pool.d/light.conf
  

заменил php5-fpm.sock на php5-fpm-light.sock и внес изменения в настройку pm. * На более низкие значения, например

  pm.max_children = 20; по умолчанию www.conf значение pm.max_children = 50
pm.start_servers = 2; значение по умолчанию www.conf pm.start_servers = 3
pm.min_spare_servers = 2; значение www.conf по умолчанию pm.min_spare_servers = 4
pm.max_spare_servers = 4; значение www.conf по умолчанию pm.max_spare_servers = 6
php_admin_value [memory_limit] = 32M; значение по умолчанию www.conf php_admin_value [memory_limit] = 192M
  

Все легкие файлы vhost настроены на fastcgi с помощью php5-fpm-light. sock, а все другие коммерческие сайты drupal настроены на fastcgi с помощью php5-fpm.носок
как

  # легкий вес
FastCgiExternalServer / usr / lib / cgi-bin / php5-fcgi-light -socket /var/run/php5-fpm-light.sock -idle-timeout 30 -pass-header Авторизация

#drupal commerce -idle-time-out установлен на высокое значение.
FastCgiExternalServer / usr / lib / cgi-bin / php5-fcgi -socket /var/run/php5-fpm.sock -idle-timeout 250 -pass-header Авторизация
  

При попытке перезапуска с использованием

  перезапуск службы apache2 && перезапуск службы php5-fpm
  

ошибка генерирует

FastCgiExternalServer: переопределение ранее определенного класса «/ usr / lib / cgi-bin / php5-fcgi-light» .

  1. Для указанной выше ошибки это означает, что необходимо создать отдельные пулы.
    с такими же настройками, но с другим сокетом?
  2. Если да, не должно ли это увеличивать потребление памяти из-за
    php_admin_value [memory_limit]?
  3. будет ли параметр -idle-timeout переопределять max_execution_time в php. ini или это разные настройки?

Для меня главное в этом apache + php-fpm + fastcgi — это то, что есть несколько файлов конфигурации, например, следующие, где я не мог понять, какие настройки отменяют (применяются) в конце.

  /etc/apache2/conf.d/php5-fpm.conf
/etc/apache2/apache2.conf
/etc/apache2/mods-available/php5.conf
/etc/php5/fpm/php-fpm.conf (может быть конфигурацией главного процесса)
/etc/php5/fpm/php.ini
/etc/php5/fpm/pool.d/www.conf (может быть больше, если присутствует несколько пулов)
  

Apache против узкого места PHP-FPM с дочерними процессами

Apache против узкого места PHP-FPM с дочерними процессами


Последнее изменение: 19 ноября 2020 г.

Обзор

Серверы Apache

, которые используют предварительную вилку MPM с меньшим количеством экземпляров сервера, чем максимальное количество дочерних процессов PHP-FPM, могут испытывать проблемы с производительностью. В этом документе объясняется, как решить эту проблему зависимости.

Важно:

Эта проблема и решение только применимы к серверам, на которых работает Apache prefork MPM.

Выпуск

В следующем сценарии конфигурация сервера PHP-FPM допускает максимум 20 дочерних процессов PHP-FPM, а конфигурация сервера Apache допускает пять экземпляров сервера.

В следующем примере представлен файл конфигурации сервера PHP-FPM:

  1
2
3
  
  _is_present: 1
pm_max_children: 20
pm_max_requests: 20  

В следующем примере представлен файл конфигурации сервера Apache:

  1
2
3
4
5
  
  StartServers: 5

MinSpareServers: 10
MaxSpareServers: 10
  

Если сервер Apache получает 20 запросов, он немедленно передает десять из этих запросов доступным дочерним процессам PHP-FPM. После того, как PHP-FPM обработает эти запросы, Apache передаст еще десять запросов PHP-FPM.

Предупреждение:

Для серверов большого объема такая конфигурация может вызвать серьезные проблемы с производительностью.

Решение

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

Установите для параметра Start Servers в интерфейсе глобальной конфигурации WHM ( WHM >> Home >> Service Configuration >> Apache Configuration >> Global Configuration ) значение, большее или равное настройке pm_max_children в WHM. Интерфейс MultiPHP Manager ( WHM >> Главная >> Программное обеспечение >> MultiPHP Manager ).

Net7 — Блог — Безопасная и эффективная установка хостинга PHP FPM для нескольких веб-сайтов

Запуск PHP как FPM (FastCGI Process Manager) не является чем-то новым, и это практически единственный способ связать его с Nginx.

Однако защитить такую ​​установку может быть непросто.

Настоящим мы представляем простой способ достижения удовлетворительного уровня безопасности на сервере, на котором запущено несколько отдельных приложений PHP (может применяться к среде общего хостинга).

В этом примере мы используем GNU / Linux Debian 10 «buster», но инструкции для Debian 9 практически такие же.

Размещение приложений PHP, будь то решения на основе контейнеров или виртуальные серверы, обычно предполагает использование модели Apache prefork и наличие PHP в качестве модуля Apache.

В настоящее время его часто можно увидеть вместе с Nginx, но по какой-то причине он был тесно связан с Apache.

Например, все образы Docker с тегами «Apache» используют модель prefork, как это предлагается во многих практических рекомендациях и руководствах по настройке сервера PHP Linux.

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

Степень изоляции максимальна, но использование ОЗУ и порождение процессов в целом очень неэффективно, в дополнение к внутренней природе самого PHP, которая заключается в перестройке всего контекста для каждого запроса.

На практике настройки prefork очень хрупкие, когда они противостоят любому всплеску трафика, и поэтому мы всегда склонны использовать другую модель выполнения, которая заключается в использовании FPM вместе с Apache в режиме цикла событий или Nginx.

PHP-FPM создает процессы-демоны, которые принимают конвейерную передачу кода PHP через них, будь то через сокет UNIX или TCP. Эти процессы хранятся в памяти и повторно используются для последующих запросов, в то время как режим предварительной вилки Apache воссоздает всю среду.

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

Оба сервера имеют схожую производительность, когда дело доходит до приложений PHP, поэтому все сводится к предпочтениям относительно того, какой из них вы хотите использовать.

В основном мы будем показывать процедуру для Apache, но здесь будет более поздний раздел о Nginx.Просто имейте в виду, что эта статья в основном предполагает, что вы хотите использовать Apache.

Мы также предполагаем, что вы вошли в систему как root. Вы можете добавить все с помощью sudo , если вы используете его в своей системе.

  apt update && apt install apache2 php7.3-fpm php7.3-curl \
  php7.3-gd php7.3-imap php7.3-intl php7.3-json php7.3-mbstring \
  php7.3-mysql php7.3-opcache php7.3-pgsql php7.3-pspell \
  php7.3-readline php7.3-recode php7.3-sqlite3 php7.3-приборка \
  php7.3-xml php7.3-xmlrpc php7.3-xsl php7.3-zip zip
  

Вы найдете все файлы конфигурации PHP в / etc / php / . Если у вас установлено несколько версий, все они будут отображаться здесь.

Технически возможно запустить отдельные версии PHP-FPM, если у вас есть другая версия пакета php7.3-fpm , которую мы установили ранее.

Попав в каталог для конкретной версии, вы найдете каталог fpm .

Базовая конфигурация PHP

Давайте сначала отредактируем файл конфигурации php.ini , который находится в каталоге fpm , чтобы настроить несколько глобальных параметров.

Вам нужно будет найти следующие строки и установить соответствующие значения для вашего случая:

  max_execution_time = 60
memory_limit = 256 МБ
date.timezone = 'Европа / Брюссель'
upload_max_filesize = 100 МБ
post_max_size = 110 млн
expose_php = Выкл.
  

Настройка пулов процессов PHP-FPM

Теперь нам нужно настроить пулы процессов для приложений PHP, которые мы хотим запускать изолированно.

PHP-FPM обработает любой файл конфигурации пула, который он найдет в каталоге /etc/php//pool. d .

Вы должны увидеть сильно аннотированный www.conf , который можно использовать в качестве основы для создания новых пулов.

Пул по умолчанию может иметь доступ ко всей системе, если его пользователь ( www-data ) имеет разрешение на чтение этих файлов и каталогов. Это очень плохо, приложения PHP могут не только видеть файлы других приложений PHP, они могут просто видеть все на сервере.

Разумные файлы должны иметь разрешения, которые не позволяют www-data читать их содержимое, но легко ошибиться и, например, скопировать закрытый ключ сертификата с неправильными разрешениями, который затем может быть прочитан и скопирован одним приложений PHP.

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

Давайте скопируем www.conf в новый файл, например myapp.conf и отредактируйте этот файл.

Изменение имени пула

Об этом шаге легко ошибочно забыть.

Вверху файла вы должны увидеть имя пула в скобках. Например, это начало файла www.conf :

 ; Создайте новый пул с именем «www».
; переменная $ pool может использоваться в любой директиве и будет заменена на
; название пула (здесь www)
[www]
  

Не забудьте отредактировать имя и сделать его новым именем пула.Например «myapp».

Замена патрона

Сначала измените имя файла сокета UNIX (или IP-адрес или порт, если вы хотите использовать TCP):

  прослушать = /run/php/php7.3-fpm-myapp.sock
  

Запуск от имени конкретного системного пользователя

В идеале вам нужно создать отдельного пользователя для каждого приложения. Итак, в нашем примере нам нужен пользователь с именем «myapp». Не давайте ему пароль, чтобы невозможно было войти в систему от имени этого пользователя через любую системную службу, которая может разрешить вход.

Теперь мы можем настроить этого пользователя для запуска пула с помощью этих двух директив:

  пользователь = myapp
группа = myapp  

Теперь мы можем сделать так, чтобы домашний каталог пользователя был каталогом приложения PHP, и на самом деле chroot PHP-FPM обрабатывает туда. Это способ обеспечить максимальную безопасность, но он также усложняет структуру этого каталога, поскольку в нем должны быть все файлы, необходимые для chroot, включая временный каталог, что-то для хранения сеансов PHP и многое другое.

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

Применить ограничения open_basedir

Директива open_basedir ограничивает файлы, к которым может получить доступ любой сценарий PHP, каталогами, указанными в директиве.

Иногда это также рассматривается как включение / tmp, но в качестве дополнительной безопасности мы создадим наш собственный каталог tmp для приложения.

Предполагая, что наше приложение находится в каталоге / srv / apps / myapp и что пул будет работать как системный пользователь myapp, давайте создадим каталог tmp:

  mkdir -p / SRV / приложения / myapp / tmp
chown -R myapp: myapp / srv / apps / myapp / tmp  

В нашем файле конфигурации пула, если вы также используете Debian, должно быть несколько примеров переопределений конфигурации PHP, которые закомментированы в конце шаблона www. conf Debian.

Основной файл php.ini , который мы редактировали ранее, является базой для всей конфигурации PHP, но мы можем переопределить большинство настроек для каждого пула.

Для нашего текущего примера добавим эти директивы:

  php_admin_value [open_basedir] = / SRV / apps / myapp
php_admin_value [sys_temp_dir] = / srv / apps / myapp / tmp
php_admin_value [upload_tmp_dir] = / SRV / apps / myapp / tmp
php_admin_value [disable_functions] = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source, dl, setenv
  

Имейте в виду, что некоторые приложения используют curl_exec для таких функций, как автоматическое обновление из веб-приложения.В таком случае вы захотите удалить его из строки disable_functions выше.

Краткое примечание : эти ограничения применяются только к FPM, а не к сценариям CLI PHP, которые вы, возможно, захотите запустить, CLI PHP использует совершенно другой файл php. ini .

Ограничения disable_functions также имеют причуду, заключающуюся в том, что они фактически добавляются к тем, которые уже находятся в основном файле php.ini (тот, что находится в / etc / php / / fpm ) — вы не можете переопределить функции, которые отключены в основном файле php.ini или удалите любой из них, вы можете только добавить больше.

Регулировка счетчика процессов

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

Больше процессов означает, что за заданное время можно обработать больше запросов, в дополнение к увеличению параллелизма за счет использования большего объема памяти.

Вам нужно убедиться, что все ваши запущенные пулы не заполнят всю память сервера, если они порождают все свои дочерние процессы.

Этот расчет зависит от того, сколько других сервисов запущено на хосте в данный момент.

Нам нравится использовать безопасное значение 80 МБ для каждого процесса. Проверьте, сколько свободной памяти в настоящее время имеет ваш сервер:

  $ бесплатно -м
        всего использованного свободного общего баффа / доступного кеша
Mem: 2004 300 721 139 981 1389
Своп: 379 1 378
  

Доступная память на уровне ОС представляет собой общий минус использованный минус общий минус буфер / кеш, который также отображается в столбце «Доступные».

Однако мы не должны препятствовать тому, чтобы ОС имела какое-либо пространство буфера / кеша, поэтому хорошим числом будет доступная память, умноженная на 0,6, которую мы затем можем разделить на ранее выбранные 80 МБ:

  (1389 * 0,6) / 80  

Это дает нам 10 процессов.

Не забывайте, что это максимальная сумма, которую вы можете иметь для всех пулов вместе . Поэтому мы хотим использовать меньше этого для нашего пула myapp.

Краткое замечание: Обычно не имеет смысла включать слишком много процессов на сервере, который имеет только один ЦП, если только ваши сценарии PHP в основном не привязаны к вводу-выводу (например. грамм. использовать файловую систему или базы данных для большинства запросов). Многие приложения для блогов или интернет-магазинов привязаны к вводу-выводу, потому что почти каждый запрос устанавливает соединение с базой данных, и в этом случае один процессор может обрабатывать более 10 процессов.

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

Вот пример конфигурации статического пула (эти директивы находятся в пуле .conf файл):

  pm = статический
pm.max_children = 5
  

Эта конфигурация будет порождать 5 процессов одновременно.

Конфигурация по умолчанию, скопированная с www.conf , покажет пример динамического пула и все будет тщательно задокументировано.

Перезагрузите конфигурацию PHP-FPM

Вам, вероятно, сначала следует проверить, правильно ли PHP FPM считывает вашу новую конфигурацию и добавляет правильные пулы процессов.

Вы можете удалить пул www по умолчанию, если вы не собираетесь его использовать, или настроить его полностью по запросу, чтобы он вообще не использовал память.

Вы можете просмотреть конфигурацию, используя следующую команду:

  $ php-fpm7.3 -tt  

Если все в порядке, перезапустите процессы FPM:

  $ systemctl перезапуск php-fpm7.3  

Простая установка PHP FPM ничего не делает с веб-сервером.Мы должны настроить его для передачи кода PHP через существующий пул процессов PHP FPM.

Общая конфигурация

На этапах установки должен был быть добавлен файл конфигурации, который мы можем использовать в качестве шаблона в /etc/apache2/conf-available/php7.3-fpm.conf .

Мы хотим скопировать этот файл, чтобы сохранить резервную копию его исходного состояния, а затем открыть его в текстовом редакторе.

Найдите следующие строки и вырежьте их из файла (держите их под рукой, эти строки нам понадобятся позже):

   + \. ph (ar | p | tml) $ ">
  SetHandler "прокси: unix: /run/php/php7.3-fpm.sock | fcgi: // localhost"

  

Сохраните изменения и включите этот файл конфигурации вместе с несколькими модулями, необходимыми для работы PHP FPM:

  $ a2enconf php7.3-fpm
прокси $ a2enmod
$ a2enmod proxy_fcgi
  

Конфигурация пулов PHP-FPM

Нам понадобится каталог для хранения всех файлов конфигурации, относящихся к пулу, для включения в соответствующие определения виртуальных хостов Apache.

В нашем примере мы будем использовать / etc / apache2 / php -pool , создайте этот каталог, если он не существует.

Если вы оставили пул www по умолчанию и хотите его использовать, создайте файл php7.3-default.conf и добавьте три строки, которые мы скопировали ранее (директива FilesMatch), и сохраните.

Вы можете использовать этот шаблон для создания файлов конфигурации для других ваших пулов. Например, для нашего пула myapp создадим php7.3-myapp.conf и добавьте следующие строки:

  
  SetHandler "прокси: unix: /run/php/php7.3-fpm-myapp.sock | fcgi: // localhost"

  

Где мы изменили путь к файлу сокета на тот, который мы определили в конфигурации пула.

Включение PHP на виртуальном хосте

При текущей конфигурации PHP не будет работать, если мы не добавим конкретную директиву в определения виртуального хоста, которая является директивой Include для файлов конфигурации пула, которые мы создали выше (в / etc / apache2 / php -pool ) например:

  Включите / etc / apache2 / php -pool / php7.3-myapp.conf  

Просто добавьте эту директиву в основной текст любого раздела , чтобы включить обработку файлов PHP и сделать это через пул FPM «myapp».

Применение конфигурации

Всегда сначала проверяйте, действительна ли ваша конфигурация:

  $ apachectl configtest  

Все нормально? Перезагрузите конфигурацию:

  $ systemctl перезагрузить apache2  

Мы решили оставить Nginx за рамками этой статьи, но принцип почти тот же. Вы должны создать фрагменты кода с директивой fastcgi_pass , указывающей на правый сокет, и включить их в разделы местоположения , соответствующие приложению PHP.

smrutiranjantripathy / alpine-apache-php-fpm: Apache-2.4 с Php-Fpm-7, построенный на Alpine 3.5

Этот образ служит для тестирования вашего приложения с Apache 2.4.7 и Php-Fpm-7 перед обновлением Apache и Php для достижения оптимальной производительности. Этот образ снижает нагрузку на Apache за счет использования Php-Fpm вместо mod-php.Используя mod_php, каждый рабочий Apache загружает в себя весь интерпретатор PHP. Поскольку Apache требуется один рабочий процесс для каждого входящего запроса, вы можете быстро получить сотни используемых рабочих процессов Apache, каждый со своим собственным интерпретатором PHP, потребляющим огромное количество памяти. Для решения этой проблемы Php настроен как процесс CGI. был создан с учетом уязвимости приложения CGI. Этот образ выводит журналы на стандартный вывод и запускает apache от имени пользователя сайта. Образ невосприимчив к httpoxy-уязвимости .

Размер образа 87,82 МБ, в качестве базового образа используется alpine3.5

Для запуска контейнера

docker run --name apache smtripat / alpine-apache-php-fpm: последний

Чтобы заставить conatiner прослушивать порт хоста 80
docker run -p 80:80 -d --name apache smtripat / alpine-apache-php-fpm: последний

Docker Compose

  apache:
   изображение: smtripat / alpine-apache-php-fpm: последний
  

Размещение веб-приложения

Docroot — это путь, по которому смонтирован каталог кода.

  docker run --name apache -v / path / to / docroot: / var / www / localhost / htdocs smtripat / alpine-apache-php-fpm: latest
  

Сопоставление порта 80 контейнера с портом 8080 локальной машины или хост-машины (или любым другим портом).

  docker run -p 8080: 80 --name apache -v / path / to / docroot: / var / www / localhost / htdocs smtripat / alpine-apache-php-fpm: latest
  

Использование Docker-Compose

  apache:
  изображение: smtripat / alpine-apache-php-fpm: последний
  тома:
    - / путь / к / docroot: / var / www / localhost / htdocs
  

Чтобы получить доступ к оболочке внутри контейнера

Чтобы получить доступ как пользователь сайта
« docker exec -it su site«

Чтобы получить доступ как пользователь root
docker exec -it <имя-контейнера> / bin / ash

Пожалуйста, не стесняйтесь задавать вопросы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *