apache2 настройка php fpm

Расширенная настройка web сервера (Apache2 + Nginx)

В этом руководстве мы рассмотрим процедуру установки и настройки работы двух web-серверов с целью использования преимуществ каждого из них, руководство подразумевает как отдельное настраивание, так и взаимное.

В этой статье будет идти речь о настройке сервера с использованием: Apache2, Nginx, ngx_pagespeed, PHP, PHP-FPM, MariaDB и MemCached.

Nginx

HTTP-сервер и обратный прокси-сервер, почтовый прокси-сервер, а также TCP/UDP прокси-сервер общего назначения.

Установка

Установите пакеты, необходимые для подключения apt-репозитория:

Для подключения apt-репозитория для стабильной версии nginx, выполните следующую команду:

Теперь нужно импортировать официальный ключ, используемый apt для проверки подлинности пакетов:

Проверьте, верный ли ключ был импортирован:

Вывод команды должен содержать полный отпечаток ключа 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62 :

Чтобы установить nginx, выполните следующие команды:

Настройка

Проверяем, что пользователь nginx user www-data :

Проверим работу веб-сервера. Открываем браузер и вводим в адресной строке http://«IP-адрес сервера».

В итоге мы должны увидеть заголовок «Welcome to nginx!».

PHP-FPM

FastCGI — протоколу взаимодействия веб-сервера с программами. FPM расшифровывается как Fastcgi Process Manager.

Установка

Настройка

Разрешаем автозапуск php-fpm и запускаем его:

ngx_pagespeed

ngx_pagespeed (или просто pagespeed) – это модуль Nginx, предназначенный для автоматической оптимизации работы сайта путём сокращения времени загрузки сайта в браузере. Дополнительную информацию о модуле можно найти на официальном сайте.

Установка

Устанавливаем необходимые пакеты:

Настройка

Создаем и переходим в папку, в которой будем собирать ngx_pagespeed :

Узнаем текущую версию nginx:

Скачиваем необходимую версию:

В нашем случае это nginx 1.18

Скачиваем репозиторий с ngx_pagespeed :

Скачиваем папку psol:

Собираем файл ngx_pagespeed.so :

Копируем файл ngx_pagespeed.so :

Apache2

Установка

Устанавливаем apache и модуль для php:

Настройка

Заходим в настройки портов:

И редактируем следующее:

мы настроили прослушивание на порту 8080, так как на 80 уже работает NGINX. Также мы закомментировали прослушивание по 443, так как и он будет слушаться NGINX.

по умолчанию, apache2 может быть установлен с модулем мультипроцессовой обработки mpm_event. Данный модуль не поддерживает php 7 и выше.

Разрешаем модуль мультипроцессовой обработки mpm_prefork :

Разрешаем модуль php :

Разрешаем модуль rewrite :

Разрешаем модуль setenvif :

Разрешаем автозапуск и запускаем службу:

Открываем браузер и вводим в адресную строку http://«IP-адрес сервера»:8080. Мы должны увидеть привычную страницу.

в разделе Server API мы должны увидеть Apache.

Apache2 Real IP

Запросы на apache приходят от NGINX, и они воспринимаются первым как от IP-адреса 127.0.0.1. На практике, это может привести к проблемам, так как некоторым сайтам необходимы реальные адреса посетителей. Для решения проблемы будем использовать модуль remoteip.

Установка

Создаем конфигурационный файл со следующим содержимым:

Настройка

Для проверки настройки открываем браузер и вводим в адресную строку http://«IP-адрес сервера», где откроется наша страница phpinfo.

В разделе Apache Environment мы должны увидеть внешний адрес компьютера, с которого обращаемся к серверу в опции REMOTE_ADDR.

Устанавливаем необходимые библиотеки для PHP и PHP-FPM:

Mysql (Mariadb)

Установка

Настройка

Разрешаем автозапуск и запускаем СУБД:

Зададим пароль для пользователя root:

Создаем и настраиваем пользователя:

Настраиваем возможность входа в adminer.php

Memcached

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

Установка

Для начала, выполняем установку пакетов:

Настройка

После разрешаем автозапуск и запускаем сервис кэширования:

Для проверки, что модуль memcached появился в PHP, открываем наш сайт в браузере — в phpinfo должна появиться новая секция Memcached.

Доступы и настройка находится в файле memcached.conf :

Настройка пользователя

Добавляем пользователя в группу www-data :

Даем права sudo пользователю:

Настройка сайта

Создаем каталог для сайта

Задаем права на папки:

Создаем индексный файл:

Настройка сайта

Nginx http

Все запросы будут переводится на локальный сервер по порту 8080, на котором работает apache, кроме обращений к статическим файлам (jpg, png, css и так далее).

apache2

Проверяем

Проверяем корректность настроек конфигурационных файлов:

https (Существующий Сертификат)

Все запросы будут переводится на локальный сервер по порту 8080, на котором работает apache, кроме обращений к статическим файлам (jpg, png, css и так далее).

Apache2

Проверяем

Проверяем корректность настроек конфигурационных файлов:

ngx_pagespeed on

Загрузка динамического модуля PageSpeed

Откройте файл nginx.conf :

Добавляем в начало:

Настраивается PageSpeed в http контексте, поэтому поместите эти директивы в новый файл конфигурации под названием example.com.conf в файле /etc/nginx/conf.d каталог.

Создаем папку для хранения кэша:

Проверяем конфигурацию Nginx и применяем настройки:

Источник

Настройка Apache для поддержки PHP-FPM на Debian/Ubuntu (apache2 + php-fpm)

В этой статье я объясню, как настроить Apache сервер для поддержки PHP-FPM на операционной системе Debian/Ubuntu. PHP-FPM — это менеджер процессов FastCGI (FCGI) в PHP, обычно используемый для высоконагруженных сайтов. Этот метод интеграции PHP использует Nginx. Но мы также можем использовать FastCGI в Apache для повышения производительности. PHP-FPM 7.4 является последней стабильной версией, доступной для установки. По этой инструкции вы также можете установить PHP-FPM 7.3, PHP-FPM 7.2, PHP-FPM 7.1, PHP-FPM 7.0.

Эта инструкция была выполнена на операционных системах: Debian 10, Debian 9, Ubuntu 20.10, Ubuntu 20.04, Ubuntu 19.10.

Читайте также:  Vybz kartel за что посадили

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

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

Установим PHP-FPM, выполнив команду в терминале:

Настройка Apache для поддержки PHP-FPM

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

Файл конфигурации Apache /etc/apache2/conf-available/php7.4-fpm.conf должен быть создан после установки PHP-FPM. Вы также можете создать этот файл вручную, выполнив команду в терминале:

Сохраняем изменения и закрываем файл.

Вы должны активировать модуль proxy_fcgi, выполнив команду в терминале:

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

Вам необходимо отключить модуль mod_php, чтобы запросы отправлялись в FCGI, выполнив команду в терминале:

Проверим конфигурацию на валидность, выполнив команду в терминале:

Теперь применим изменения конфигурации, выполнив команду в терминале:

Тестирование Apache с поддержкой PHP-FPM

Давайте убедимся, что Apache сервер корректно отображает содержимое, сгенерированное PHP скриптом, открыв данную страницу в браузере:

или для локального хоста

Если вы правильно настроили Apache для поддержки PHP-FPM, то отобразится похожая страница:

После проверки в целях безопасности вам необходимо удалить этот файл, выполнив команду в терминале:

Источник

Настройка Apache с помощью MPM Event и PHP-FPM

Apache HTTP сервер развивался много лет и сейчас может работать в разных средах и решать разные задачи. Одна из важных проблем, которую Apache HTTP (как и любой другой веб-сервер) должен решить – это обработка процессов для обслуживания запросов протокола http. Эта процедура подразумевает открытие сокета, обслуживание запроса, поддержку соединения в течение определенного времени, обработку новых событий, идущих через это соединение, и возврат контента, созданного программой, которая написана на определенном языке (например, PHP, Perl или Python). Эти задачи выполняет модуль MPM (модуль мультипроцессовой обработки).

Apache HTTP поставляется с тремя MPM-модулями:

PHP-FPM – менеджер процессов FastCGI для PHP. Протокол FastCGI основан на Common Gateway Interface (CGI), протоколе, который располагается между приложениями и веб-серверами. Это позволяет разработчикам писать приложения, независящие от поведения веб-серверов. Программы запускают свои процессы независимо и по протоколу CGI передают свой результат на веб-сервер. Каждое новое соединение, которое требует обработки приложением, создает новый процесс.

Комбинируя MPM Event с менеджером процессов PHP FastCGI (PHP-FPM), веб-сайт сможет загружаться быстрее и обрабатывать больше одновременных подключений, используя при этом меньшее количество ресурсов.

В этом руководстве вы узнаете, как улучшить производительность стека LAMP, заменив модуль pre-fork (по умолчанию) на event и используя менеджер процессов PHP-FPM для обработки кода PHP вместо классического mod_php в Apache HTTP.

Требования

1: Настройка MPM-модуля

Ubuntu наследует сценарии включения и отключения модулей Apache от своего родительского дистрибутива Debian. На начальном этапе мы воспользуемся этим набором инструментов, чтобы отключить модуль Pre-fork и включить модуль Event.

Сейчас вы остановите сервер Apache HTTP, отключите модуль PHP 7.2, связанный с модулем Pre-fork, а затем отключите Pre-fork, чтобы сразу после этого включить модуль Event.

sudo systemctl stop apache2

Теперь вы можете отключить связанный с модулем Pre-fork модуль PHP 7.2:

sudo a2dismod php7.2

Затем отключите сам MPM-модуль Pre-fork:

sudo a2dismod mpm_prefork

Включите MPM-модуль Event:

sudo a2enmod mpm_event

Готово, мы переключили MPM с pre-fork на event и удалили соединение между PHP и Apache HTTP. На следующем этапе мы установим модуль php-fpm, а также связанные с ним библиотеки и прокси-модули, а затем настроим Apache HTTP так, чтобы он снова мог взаимодействовать с PHP.

2: Настройка Apache для поддержки FastCGI

Только что мы изменили способ обработки соединений Apache HTTP, переключившись с Pre-fork MPM на Event. Однако при этом мы также отключили модуль PHP, который связывал Apache со всеми программами, работающими на PHP.

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

Сначала установите php-fpm. Следующая команда установит пакет PHP-FPM и автоматически включит сервис php7.2-fpm, интегрированный с systemd (поэтому сервис будет запускаться во время загрузки сервера):

sudo apt install php-fpm

Для связи Apache HTTP и PHP нужна библиотека, обеспечивающая их взаимодействие. Теперь давайте установим библиотеку libapache2-mod-fcgid, которая может служить интерфейсом между программами и веб-серверами. Эта связь будет происходить через UNIX-сокет. Установите ее:

sudo apt install libapache2-mod-fcgid

Вы установили php-fpm и libapache2-mod-fcgid, но ни один из этих компонентов еще не включен.

Сначала мы включим модуль php-fpm:

sudo a2enconf php7.2-fpm

Затем давайте модуль Apache HTTP под названием proxy:

sudo a2enmod proxy

А теперь можно включить FastCGI модуль proxy:

sudo a2enmod proxy_fcgi

Примечание: Вы можете прочитать конфигурацию взаимодействия между программами PHP и Apache через UNIX сокет с помощью команды:

Теперь все готово, мы можем запустить Apache HTTP. Сначала выполните проверку конфигурации:

sudo apachectl configtest

Вы должны получить такой вывод:

После этого можно приступать к перезапуску Apache HTTP – сервер автоматически запустился при установке FastCGI библиотеки libapache2-mod-fcgid:

Читайте также:  магнитки в магните что это

sudo systemctl restart apache2

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

Теперь в Apache включен MPM-модуль Event, а PHP-FPM настроен и запущен. Пришло время убедиться, что все работает так, как мы того ожидаем.

3: Проверка конфигурации

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

Проверьте HTTP-сервер Apache, выполнив следующую команду:

Вы получите такой вывод:

То же самое можно повторить для модуля proxy и FastCGI:

Результат будет выглядеть так:

proxy_module (shared)
proxy_fcgi_module (shared)

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

Выполните следующую команду, чтобы создать файл с таким именем:

sudo nano /var/www/your_domain/info.php

Добавьте в файл следующую строку:

Теперь откройте URL-адрес вашего сервера и добавьте секцию info.php в конец адреса, например:

В строке Server API будет FPM/FastCGI.

Обязательно удалите файл info.php после этой проверки, иначе конфиденциальная информация о вашем сервере будет находиться в публичном доступе.

sudo rm /var/www/yourdomain.com/info.php

Итак, мы проверили состояние MPM, модулей FastCGI и обработки кода PHP.

Заключение

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

Читайте официальную документацию по HTTP-серверу Apache для получения дополнительной информации о других модулях и связанных проектах.

Источник

Оптимизация производительности apache2

Многие используют apache2 в качестве веб-сервера. Однако мало кто задумывается об оптимизации его производительности, что прямо пропорционально сказывается на скорости загрузки страниц сайта, скорости обработки скриптов (в частности php), а также на росте нагрузки на ЦП и увеличении объёма используемой ОЗУ.

Таким образом, следующий мануал, должен помочь начинающим (и не только) пользователям.
Все нижеприведённые примеры использовались на Raspberry PI 3, Debian 9, Apache 2.4.38, PHP 7.3.

Итак, начнем.

1. Отключение неиспользуемых модулей

Первым методом является банальное отключение модулей, которые вы не используете:

Список используемых в данный момент модулей можно посмотреть командой:

Для отключения модуля используется команда:

Соответственно для включения модуля используется команда:

Обратите внимание, что при использовании a2dismod, название модуля необходимо писать без самого слова модуль.

Наиболее загружающими систему модулями (по личному опыту) являются:

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

2. Смена MPM(Multi-Processing Module) и использование php-fpm

По умолчанию, после установки, apache2 использует MPM Prefork (1 поток на 1 соединение), который заметно снижает производительность, но при этом улучшает стабильность и безопасность.

Но для оптимизации производительности я рекомендую использовать MPM Worker, который позволяет использовать сразу несколько потоков на одно соединение.

Для его включения используем следующие команды:

Однако при использовании Worker вы можете столкнуться с проблемой, т.к. модуль php7.3 зависит от модуля Prefork.

Для решения этой проблемы установим модуль php7.3-fpm, который будет использоваться для отработки php-скриптов:

Стоит заметить, что использование php-fpm также снизит объём используемой ОЗУ процессом apache2 и немного ускорит отработку php-скриптов.

3. Заключение

Таким образом, такими простыми действиями мы смогли оптимизировать производительность и снизить нагрузку на машину (в данном случае RPI3).

Конечно же, есть сотни других вариантов оптимизации, вроде включения сжатия (что действительно полезно, но в большинстве своём уже включено по умолчанию), изменения параметров (файлов конфигурации) MPM, отключения HostnameLookups и т.д., но в данной статье я постарался отразить именно те пункты, которые больше всего помогли мне, и надеюсь, что помогут другим.

Источник

Пошаговая настройка Apache с выбором версий php + Nginx как reverse proxy (с mod_pagespeed) на ubuntu 16.04

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

В посте будут решены и описаны следующий задачи:

1. Установка Apache + PHP
2. Возможность выбора версий PHP
3. Возможность работы сайтов от разных пользователей, с ограничением на чтение директорий других сайтов.
4. Установка Nginx с модулем pagespeed от google
5. Настройка Nginx как reverse proxy

Все этапы будут содержать описание и пояснения. Сам пост писался больше для себя, чтобы не потерять порядок настройки, но будет очень полезным для новичков, которые начинают разбираться в администрировании сервера. В качестве сервера установлен Ubuntu 16.0.4 только с SSH.

ЭТАП 1 (Установка Apache + PHP)

Запускаем оболочку с root правами:

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

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

Читайте также:  разум абсолют и тело невесомо

Устанавливаем php (как mod_php)

На данном этапе у нас установиться php версии 7 как модуль apache.

ЭТАП 2 (Возможность выбора версий PHP)

На первом этапе мы установили сервер Apache + PHP при чем PHP у нас работает как модуль Apache. Существует несколько режимов работы PHP подробную информацию можно прочитать по ссылке «Коротко о CGI, FastCGI, PHP-FPM и mod_php».

Если вам лень читать, то объясню проще:

1. mod_php — сам Apache выполняет php скрипт.

Плюсы: работает быстро, требует минимум настроек и знаний
Минусы: скрипты выполняются от пользователя apache (как правило www-data)

2. CGI/FastCGI — Сервер Apache запускает прикладной скрипт интерпретатора php-cgi, который в свою очередь выполняет php скрипт

Плюсы: скрипты выполняются от произвольного пользователя, можно использовать в связке с другими приложениями (Nginx + PHP), конфигурацию PHP можно сделать индивидуальной
Минусы: скорость работы, дополнительная настройка

3.PHP-FPM — это модернизированный fast-cgi сервер который постоянно держит готовые для работы пул-процессов.

Плюсы: скорость работы, скрипты выполняются от произвольного пользователя, можно использовать в связке с другими приложениями (Nginx + PHP-FPM — самая распространная реализация)
Минусы: дополнительная настройка, занимает порт, на каждого пользователя открывается свой порт.

Мы остановимся на CGI/FastCGI. На самом деле многие может испугать, что он самый медленный, но на большинстве shared хостингов, именно этот режим работы (ispmanager использует именно этот режим работы). Нам потребуется собрать из исходников версии php которые нам необходимы.

2.1 Сборка php из исходников

Устанавливаем необходимые для сборки пакеты:

Символ \ используется как перенос строки, для удобства чтения.

Создаем папки для php:

Переходим в директорию в которой будут храниться исходники php

Скачиваем необходимую версию php и распаковываем ёё:

В последней команде мы скачали по ссылке php-5.6.18 и сохранили как php-5.6.18.tar.bz2
После чего распаковали архив.

Переходим в директория скаченного и распакованного php

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

В результате будет что то вроде:

PHP 5.6.18 (cli) (built: Jun 8 2017 15:59:20)
Copyright © 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright © 1998-2016 Zend Technologies

2.2 Настройка Apache

Далее нам потребуется чтобы Apache вызывал php скрипт через режим fastcgi. Устанавливаем и активируем mod_fcgi

перезапустим сервис Apache

2.3 Создание CGI скрипта

Создадим обертку для запуска PHP-FastCGI

Вставляем код, выходим CTRL+X и подтверждаем изменения.

Делаем файл испольняемым:

В той же директории создаем файл php.ini () можно скопировать /opt/source/php/php-5.6.18/php.ini-production.

2.4 Настройка хоста для Apache

В примере будет показана настройка виртуального хоста по умолчанию:

Перезапускаем настройки Apache:

ЭТАП 3 ( Возможность работы сайтов от разных пользователей, с ограничением на чтение директорий других сайтов.)

Для разграничения прав по пользователям у Apache есть 2 разных модуля suEXEC и ITK.

Рассмотрим как работает каждый из них:

ITK — При поступлении запроса, apache создает процесс-обработчик, который наследует права корневого процесса, но после проверки контекста меняет свои права на указанного пользователя.

suEXEC в нашем варианте предпочтительней из-за особенности архитектуры работы. Устанавливаем suEXEC

Важно, для правильной работы suexec необходимы правильно выставить права на директории.
Как располагать директории вы должны определиться сами, в примере приведется пример, и он не является оптимальным.

Иерархия папок следующая:

Копируем файлы настроек для php:

Создаем юзера (важно помнить что все пользователи в группе admin имеют доступ на запуск программ из sudo, поэтому при выборе имени admin он автоматически будет иметь права на выполнения sudo. В данном примере это не критично, но вам следует помнить об этом при создании пользователя).

Выставляем владельца папки:

Выставляем корневую директорию для пользователя:

Настраиваем виртуальные хосты в apache:

В настройках php.ini пользователя меняем session.save_path
session.save_path = /var/www/users/admin/temp/php-session

ЭТАП 4 (Установка Nginx с модулем pagespeed от google)

Забегая вперед, для поддержки pagespeed в Nginx требуется пересобрать сам Nginx с этим модулем, но чтобы потом не лазить дополнительно в настройках, проще сначало установить его.
Изменяем порты для Apache:

Собираем Nginx с pagespeed

Вначале необходимо установить все необходимы для сборки пакеты:

Создаем папки для исходников nginx:

Скачиваем и распаковываем pagespeed и psol. Yt cnjbn g

Сам psol скачивается и распаковывается в директории с ngx_pagespeed. Переходим в папку с Ngnix

Проверяем версию ngnix (по умолчанию в ubuntu 16.0.4 устанавливается 1.10.0):

Загружаем т версию NGINX:

Собираем nginx с теми же параметрами что и установленный, но в конце добавляем дополнительные модули:

Собранный бинарный файл Nginx располагается в директории /opt/source/nginx/nginx-1.10.0/objs/nginx. Для того чтобы установить, требуется просто заменить текущий испоняемый файл Nginx на собранный.

Остановим Nginx, заменим файл, и перезапустим его.

#Переименовываем (на всякий случай) текущий nginx в nginx_backup:

# Перемещаем на его место новый собранный бинарник:

Создаем папку хранения кэша для pagespeed:

Добавим /etc/nginx/nginx.conf в секцию http:

ЭТАП 5 (Настройка Nginx как reverse proxy )

Скажу скажу что в интернете кучу статей для настройки Nginx как reverse proxy. Я лиш приведу ознакомительный вариант настройки.

Источник

Образовательный портал