www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Обслуживание PHP на Apache HTTPD с PHP-FPM

Дата публикации Oct 3, 2019

В этой статье мы настроим Apache HTTPD для использования PHP-FPM для обслуживания файлов PHP вместо использования встроенногоmod_php,

Предпосылки

  • В вашей системе должна быть установлена ​​LAMP с HTTPD 2.4. В Интернете есть множество учебных пособий, посвященных установке LAMP. Пожалуйста, следуйте таким инструкциям для вашей ОС.

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

Мы будем использовать CentOS 7 с HTTPD, установленным из репозитория дистрибутива, и PHP 7.3 изИУС, Путь для конфигурации сервера HTTPD/etc/httpdи настройки PHP включены/etc/php.d(для модулей);/etc/php-fpm.d а также/etc/php-fpm.conf(для PHP-FPM); а также/etc/php.ini(основная конфигурация PHP). Замените каталогами, программами и пакетами из вашей установки соответственно через эту историю.

Переключиться на событие MPM

По умолчанию HTTPD использует prefork MPM. Когда запрос поступает на сервер, HTTPD запускает процесс для обработки каждого запроса. Больше запросов, больше процессов, которые HTTPD должен порождать, чтобы не отставать. Однако такая конфигурация требует много ресурсов сервера (особенно ОЗУ).

HTTPD 2.4 представляет как рабочий, так и событийный MPM. Вместо порождения таких процессов, как prefork MPM, существует только один главный процесс, который, в свою очередь, порождает множество рабочих процессов. Каждый работник может обрабатывать входящие запросы одновременно, используя преимущества многопоточности. Событие MPM оптимизирует запросы поддержки активности, используя выделенный поток для обработки таких запросов и передачи активных запросов другим потокам.

Сочетание PHP-FPM с событием MPM может ускорить обслуживание PHP, чем при использованииmod_php(с только совместимым prefork MPM) и более ресурсоэффективным.

Переключение с prefork на событие MPM путем редактирования/etc/httpd/conf.modules.d/00-mpm.confчтобы:

...
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
...
LoadModule mpm_event_module modules/mod_mpm_event.so

Так как событие MPM несовместимо сmod_php, удалить / удалитьmod_php73затем перезагрузитеhttpd.service,

Конфигурация HTTPD

В зависимости от вашей настройки может быть предоставлен пакет, содержащий конфигурацию PHP-FPM для HTTPD (php73-fpm-httpдля этой настройки). Если доступно, установите его. В противном случае создайте/etc/httpd/conf.d/php-fpm.confсо следующим:

#
# The following lines prevent .user.ini files from being viewed by Web clients.
#
<Files ".user.ini">
Require all denied
</Files>#
# 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#
# Redirect to local php-fpm (no mod_php in default configuration)
#
# Enable http authorization headers
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1<FilesMatch \.(php|phar)$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
#SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>

Изменить конфигурацию сайта для вашего сайта (например,/etc/httpd/conf.d/domain.tld.conf) и добавьте следующие блоки. Если вам нужно установить параметры для добавления проксиProxySetдирективы кProxyблок. Например, установите время ожидания прослушивания на 100 секунд, потому что некоторые сценарии установки могут выдать504 Gateway Timeoutиспользуя настройку тайм-аута по умолчанию:

...
<Proxy "unix:/run/php-fpm/www.sock|fcgi://localhost">
# add ProxySet directives here
# Set gateway timeout to 100 seconds
ProxySet timeout=100
</Proxy># Set proxy handler to PHP-FPM
# NOTE: If you define proxy block above using socket, don't
# set it again, as it have been defined above with alias
# to fcgi URL!
<FilesMatch \.(php|phar)$>
SetHandler "proxy:fcgi://localhost"
</FilesMatch>
...

Проверьте конфигурацию с помощью# apachectl configtest, Если синтаксис в порядке, перезапуститеhttpd.service,

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

редактировать/etc/php-fpm.d/www.confследующим образом:

Установите пользователя и группу для PHP-FPM для пользователя, который запускает HTTPD, обычноapache:

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = apache
group = apache
...

Вместо использования сокета TCP наlocalhost:9000, слушайте сокет UNIX:

...
; 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 IPv4 addres
s on
; a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses
; (IPv6 and IPv4-mapped) 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
; WARNING: If you switch to a unix socket, you have to grant your webserver user
; access to that socket by setting listen.acl_users to the webserver user.
listen = /run/php-fpm/www.sock
...

Установите разрешение на прослушивание сокета UNIX для пользователя HTTPD:

...
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
; mode is set to 0660
listen.owner = apache
listen.group = apache
;listen.mode = 0660
...

Изменить основную конфигурацию PHP на/etc/php.iniследующим образом:

Увеличьте время выполнения скрипта до 100 секунд. Это можно использовать, если у вас есть установочные скрипты, которые могут возвращать504ошибка по умолчанию настройки тайм-аута:

...
; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 100
...

Увеличьте ограничение размера загружаемого файла и ограничение размера POST до 8M:

...
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 8M
...
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 8M
...

В системах на основе RPM (CentOS / RedHat, Fedora и т. Д.) Разрешить запись каталога сессий PHP по HTTPD:

# chown -R apache:apache /var/lib/php
# chown -R apache:apache /var/lib/php/fpm/session

Перезапускphp-fpm.service,

Испытательная установка

Создайтеphpinfo.phpСценарий со следующим и поместите в корень документа вашего сайта:

<?php
phpinfo();
?>

Посетите скрипт на вашем сайте (например,domain.tld/phpinfo.php) используя ваш браузер. Вы должны увидеть информацию о вашей конфигурации PHP, как показано ниже:

PHP информация

Поздравляем, PHP был обслужен HTTPD через PHP-FPM! Теперь вы можете установить ваши любимые веб-приложения (например, WordPress) поверх настроек вашего стека.

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map