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)».
Чтобы использовать режим:
- Установите Apache-MPM-ITK или Apache MPM-Prefork, Модуль PHP. Подробнее см. в статье Установка веб-сервера.
- Включите в Учётные записи → Пользователи → Изменить опцию Может использовать PHP как модуль apache.
- Выберите режим при создании или изменении 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;
- самый медленный режим работы.
Чтобы использовать режим:
- Установите Apache-MPM-ITK или Apache MPM-Prefork. Подробнее см. в статье Установка веб-сервера.
- Включите в Учётные записи → Пользователи → Изменить опцию Может использовать PHP в режиме CGI.
- Выберите режим при создании или изменении 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».
Чтобы использовать режим:
- Установите Apache MPM-Prefork и Модуль PHP. Подробнее см. в статье Установка веб-сервера.
- Включите в Учётные записи → Пользователи → Изменить опцию Может использовать PHP в режиме FastCGI (Apache).
- Выберите режим при создании или изменении 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;
- самый быстрый режим работы.
Чтобы использовать режим:
- Установите Nginx, PHP-FPM FastCGI. Подробнее см. в статье Установка веб-сервера.
- Включите в Учётные записи → Пользователи → Изменить опцию Может использовать PHP в режиме FastCGI (Nginx + PHP-FPM).
- Выберите режим при создании или изменении 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.- Надо выключить 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
Создаем пуул для своего пользователя. 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
- Теперь в теле своего сайта /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. оно должно быть таким каким мы его поменяли ранее.
- Теперь можно создавать папку для сайта с правами пользователя. например
sudo mkdir /var/www/dirofmysite sudo chown username:username /var/www/dirofmysite
- Далее рестартуем сервисы.
sudo systemctl restart php7.3-fpm sudo systemctl restart apache2
- безопасность. поскольку включается 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.pyps_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 МБ = 28003. Вычислить 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
IfModule>Обратите внимание, что настройки по умолчанию не содержат «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 CommunityTraducciones 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.Перед началом работы
Выполните шаги, указанные в
Как установить стек LAMP в CentOS 8. После заполнения руководства по стеку LAMP у вас должна быть конфигурация виртуальных хостов Apache для вашего собственного веб-сайта.В этом руководстве сайт по-прежнему будет называтьсяexample.com
.Примечание
В примерах этого руководства будет использоваться PHP версии 7.3. При выполнении команд, связанных с PHP, убедитесь, что вы заменили все номера версий на версию PHP вашей собственной системы.
Установка mod_fcgid и PHP-FPM
В этом разделе вы установите модули
mod_fcgid
иPHP-FPM
на свой CentOS 8 Linode.Обновите свою систему, если вы еще этого не сделали, и установите утилиту командной строки
wget
.sudo yum update && sudo yum install wget -y
Установить
mod_fcgid
иPHP-FPM
:sudo yum install mod_fcgid php-fpm
Проверьте правильность конфигурации:
sudo httpd -t
Перезапустите веб-сервер 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.
- Надо выключить mod-php+mpm-prefork+mpm-itk если он был установлен и включить php-fpm+mpm-event.
Если выходные данные не возвращаются, вам необходимо отредактировать
Файл конфигурации пула PHP, добавив параметрlisten
с адресом для приема запросов FastCGI. Добавьте строку в файл примера.- Файл: /etc/php-fpm.d/www.conf
1 2
слушать = /var/run/php-fpm/www.sock
Если
listen = 127.0.0.1:9000
еще не раскомментирован, сделайте это сейчас:- Файл: /etc/php-fpm.d/www.conf
1 2
listen.allowed_clients = 127.0.0.1
Перезапустите демон
php-fpm
, чтобы изменения вступили в силу.sudo systemctl перезапустить php-fpm
С помощью текстового редактора по вашему выбору обновите файл конфигурации 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
Проверьте наличие ошибок конфигурации.
sudo httpd -t
Отредактируйте файл конфигурации модуля 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
Проверьте наличие ошибок конфигурации.
sudo httpd -t
Если вы получили Syntax OK для шагов 6 и 8, перезапустите службу Apache:
sudo systemctl restart httpd
Проверьте, работает ли PHP, создав и открыв страницу с отображаемым
phpinfo ()
. Создайте файлinfo.php
.sudo touch /var/www/html/example.com/public_html/info.php
Открыть информацию
.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 , вы можете выполнить шаги, описанные в нашем
Обеспечение безопасности вашего руководства пользователя.
Создайте копию исходного файла пула, чтобы использовать ее в качестве основы для конфигурации пула
example. com
.sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/example.com.conf
Отредактируйте файл, чтобы изменить имя сокета, пользователя и группу, а также адрес прослушивания сокета. Убедитесь, что адрес прослушивания отличается от адреса прослушивания, который вы установили в основном файле конфигурации пула 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
Перезапустите процесс
php7.3-fpm
для создания нового пула.sudo systemctl перезапустить php-fpm
Отредактируйте файл виртуального хоста
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 / "
Проверьте файл конфигурации на наличие ошибок.
sudo httpd -t
Если ошибок не было, перезапустите Apache.
sudo systemctl перезапустить httpd
Используйте инструмент командной строки 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» .
- Для указанной выше ошибки это означает, что необходимо создать отдельные пулы.
с такими же настройками, но с другим сокетом? - Если да, не должно ли это увеличивать потребление памяти из-за
php_admin_value [memory_limit]? - будет ли параметр -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:
| |
В следующем примере представлен файл конфигурации сервера Apache:
| |
Если сервер 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/
Вы должны увидеть сильно аннотированный 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 /
Регулировка счетчика процессов
Последнее, что вы можете настроить в конфигурации пула, — это количество процессов, которые в нем будут.
Больше процессов означает, что за заданное время можно обработать больше запросов, в дополнение к увеличению параллелизма за счет использования большего объема памяти.
Вам нужно убедиться, что все ваши запущенные пулы не заполнят всю память сервера, если они порождают все свои дочерние процессы.
Этот расчет зависит от того, сколько других сервисов запущено на хосте в данный момент.
Нам нравится использовать безопасное значение 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
Просто добавьте эту директиву в основной текст любого раздела
Применение конфигурации
Всегда сначала проверяйте, действительна ли ваша конфигурация:
$ 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
Пожалуйста, не стесняйтесь задавать вопросы.