Apache работал медленно в производстве. После поиска ответов в течение некоторого времени я, наконец, перешел на IRC-канал #apache, и профессионалы попросили меня проверить режим apache с помощью этой команды:
sudo apachectl -V
и были встревожены, обнаружив, что Server MPM является prefork . Они решительно заявили, что НЕ ИСПОЛЬЗУЙТЕ ПРЕДВАРИТЕЛЬНОСТЬ НА СЕРВЕРЕ ПРОДУКЦИИ. Как оказалось, пакеты Ubuntu (предположительно унаследованные от Debian?) Настаивают на запуске apache в режиме prefork, несмотря на тот факт, что рекомендуемый метод для запуска PHP с Apache явно рекомендует proxy_fcgi и php-fpm, затем fcgid и в конечном итоге говорит, что вы не должны использовать prefork:
Почему вы не должны больше использовать mod_php с prefork mpm
- mod_php загружается в каждый процесс httpd постоянно. Даже когда httpd обслуживает статический / не php контент, эта память используется.
- mod_php не является потокобезопасным и заставляет вас придерживаться prefork mpm (многопроцессный, без потоков), который является самой медленной из возможных конфигураций
На этой странице также содержатся некоторые подробности о PHP-FPM, но это кажется немного сложным и неясным и, по-видимому, связано с ручной настройкой. Я разочарован и удивлен, что в Ubuntu 16 нет опции пакета для режима fastCGI или чего-то такого.
Я попытался переключить Apache в режим событий, используя a2enmod, и когда я попытался запустить Apache, я получил ошибку:
Apache работает с многопоточным MPM, но ваш модуль PHP не скомпилирован для обеспечения многопоточности. Вам нужно перекомпилировать PHP
Во всяком случае, мне было интересно, есть ли у кого-нибудь минимальные пошаговые инструкции для запуска режима fastCGI на Ubuntu 16 с PHP 7.0 , максимально полагаясь на установщики пакетов. В настоящее время я смотрю на многие плохо объясненные, расплывчатые инструкции и беспокоюсь о том, чтобы испортить производственную среду плохими решениями.
Также кто-то должен добавить mpm-событие в качестве опции тега. Вот что порекомендовали ребята из IRAP #apache.
Ответы:
ezra-s предлагает хороший подход, но он не включает некоторые детали, которые могут сбить с толку тех, кто полагается на менеджеров пакетов. ПРИМЕЧАНИЕ : я не уверен, что эти шаги точны. Если у кого-то возникнут проблемы или возникнут проблемы, дайте мне знать, и я обновлю этот пост.
Во-первых, на момент написания этой статьи пакеты apache2 в Ubuntu настаивали на prefork, если вы хотите установить PHP. Не отчаивайтесь, однако, потому что вы все еще можете использовать пакет монтажников для установки и обновления PHP и apache2 и все еще получить конфигурацию работы с Apache в событии режиме с использованием PHP-FPM , как это было рекомендовано вики Apache и описаны более подробно в сильноточных производительность PHP на apache httpd 2.4.x с использованием mod_proxy_fcgi и php-fpm . Основная идея заключается в том, что apache2 и PHP-FPM взаимодействуют через сокет, а не с PHP, работающим как модуль Apache.
1) Удалить или отключить модуль Apache PHP
Поскольку пакеты Ubuntu при установке PHP настаивают на префорке Apache, мы должны разделить их. Я сделал это с помощью apt для удаления libapache2-mod-php7.0, потому что мне больше не нужен пакет:
В качестве альтернативы вы можете отключить модуль Apache php7.0 вместо этого, но это не приведет к удалению пакета apt из вашей системы, что приведет к раздражающему раздражению системы.
2) Переключите Apache в режим событий и включите fcgid
Я считаю, что эти команды должны сделать свое дело:
3) Установите PHP-FPM
У меня уже установлен PHP 7 с различными модулями, поэтому я просто устанавливаю PHP-FPM с помощью этой команды:
4) Отредактируйте конфигурацию VirtualHost для обработки файлов PHP с помощью PHP-FPM:
В моем случае я отредактировал хост SSL по умолчанию, /etc/apache2/sites-available/default-ssl.conf , и добавил эту строку прямо вверху:
ВАЖНО Это указывает Apache на обработку запросов к PHP-файлу с помощью PHP-FPRM, и путь в этой директиве ( /run/php/php7.0-fpm.sock ) должен совпадать с путем, указанным директивой listen в файле / etc / php /7.0/fpm/pool.d/www.conf
5) Перезапустите Apache
Чтобы проверить, включен ли режим события, используйте эту команду:
В выводе вы должны увидеть это:
Попробуйте создать страницу phpinfo и открыть ее в своем браузере. Вы должны увидеть
Server API: FPM/FastCGI
в выводе.источник
a2enconf /etc/apache2/conf-available/php7.3-fpm.conf; systemctl reload apache
и когда я создал файл phpinfo.php с<?php phpinfo();
внутренним компонентом , в строке API сервера указано FPM / FastCGI. Кстати, я установил php7.3, потому что на момент написания этого поста, по крайней мере, нужно быть на этой версии, если не выше, и репозитории Ubuntu apt для Ubuntu Server 19.10 в настоящее время доходят до php7.3.Для удобства дистрибутивы предлагают метод "mod_php".
В то время как наиболее эффективный способ - это apache w / event + mod_proxy_fcgi -> php-fpm.
Возможно, им следует обновиться в соответствии со временем, но это трудно для них, когда так много фреймворков поставляются с конфигурациями .htaccess mod_php в стиле «подключи и работай». В конце концов, только администратор отвечает за правильное администрирование и настройку своего сайта.
Если вы находитесь в производстве, я бы предложил вам использовать тестовый сервер, чтобы практиковать обновление и изменения.
О вики я предпочитаю или рекомендую вам метод "обработчик". https://wiki.apache.org/httpd/PHP-FPM#Proxy_via_handler .
То есть сконфигурируйте php-fpm так, чтобы сокет был готов и имел достаточные разрешения, чтобы пользователь Apache мог отправлять запросы на него, и настраивать Apache для его использования.
Быстрый пример:
Редактировать:
Таким образом, не имеет значения, какую версию PHP вы используете, потому что Apache это не волнует, он просто обратит прокси соответствующие запросы к php-fpm.
Также не забудьте выгрузить mod_php, чтобы можно было использовать mpm_event.
Изменить 2:
Согласно запросу, вам не нужно удалять пакеты mod_php из debian / ubuntu, Apache заботится только о его конфигурации, так что выгрузка модуля подойдет.
источник