Как связать php с apache
Настройка HTTP/2 на примере Apache 2.4, PHP 7 и Ubuntu 18.04 LTS
Я понимаю, что, возможно, Апач на данный момент не является предпочтительным выбором для запуска на нём новых проектов, то тем не менее, он существует, здравствует и проекты на нём таки работают. Выбор на него может пасть по каким-то личным предпочтениям, по требованиям совместимости, или каким-то другим соображениям… не суть. В этой статье я хочу по пунктам описать, как настроить поддержку протокола HTTP/2 на веб-сервере Apache, потому что сам им пользуюсь и в такой статье нуждаюсь нуждался, и надеюсь, что кому-нибудь она тоже пригодится на практике.
Что такое HTTP/2? Как понятно из названия, это — вторая версия протокола HTTP. Подробнее о преимуществах Вы можете прочитать хотя бы на Википедии. От себя лишь скажу, что если Вы хоститесь не на шаред-хостинге, то поддерживать данный протокол — must have, как и, например, HTTPS. Да, для того, чтобы у Вас заработал HTTP/2, Вам потребуется полноценный доступ к консоли машины (пусть и к виртуальной) через ssh или каким-то иным образом, а также уже настроенный HTTPS (TLS/SSL). Ну что же, давайте приступим к делу.
Шаг первый. Обновление Apache
Протокол HTTP/2 поддерживается сервером Apache с версии 2.4.24, поэтому, если у Вас установлена более старая версия, — самое время её обновить. Но сначала проверим:
Эта команда выдаст что-то вроде такого:
В первой строчке указана версия сервера. Если она больше или равна 2.4.24, — можем смело переходить ко второму шагу. В противном случае, нужно обновить апач, актуальные версии которого Вы сможете найти в PPA известного (если Вам уже приходилось ставить что-то свеженькое на Debian/Ubuntu) разработчика — Ondřej Surý. PPA — это персональные пакеты, не включённые в официальные репозитории дистрибутивов. Поэтому, чтобы воспользоваться ими, сначала нужно научить систему, что и откуда брать:
Парень делает хорошее дело, и не против получить небольшой донат, о чём весьма недвусмысленно заявляет при подключении к его репам…
Далее, собственно, обновляем пакеты:
И снова проверяем версию Apache. Если всё прошло хорошо — на Вашем сервере будет стоять Apache, на котором можно настроить HTTP/2. Если всё пошло плохо — боюсь, это уже не тема данной статьи. А теперь переходим ко второму шагу.
Шаг второй. Использование FastCGI
Что такое FastCGI — лучше почитать, как я уже говорил, хотя бы в Википедии, потому что коротко не расскажешь. Вам нужно перейти на PHP, работающем в режиме FastCGI (php-fpm). Как это работает — дан хороший ответ на Тостере. Здесь же я в такие нюансы вдаваться не буду, а перейду сразу к установке:
После установки нам будет сказано буквально следующее: чтобы включить PHP 7.2 FPM в Apache2, сделайте:
Делаем. После этого нужно отключить mod_php, потому что вместо него у Вас теперь php-fpm.
Вообще говоря, версия PHP у Вас до этого могла стоять другая. Глянуть, что за модули у Вас установлены в системе можно в директории /etc/apache2/mods-available/, а какие активны в /etc/apache2/mods-enabled
Далее перезапускаем Apache
и переходим к третьему шагу.
Шаг третий. Переход с модуля Prefork на Event
Что такое MPM и в чём разница между prefork, event, worker — можно почитать вот в этой замечательной статье… но сейчас на самом деле важно знать только одно: «стандартный» prefork не очень совместим с HTTP/2, поэтому Вам нужно использовать более подходящий. Выключаем один, включаем другой, перезагружаем Apache.
Шаг четвёртый. Включаем HTTP/2
Либо в конфигурационный файл хоста, найти который можно в директории /etc/apache2/sites-enabled/, либо в конфиге самого сервера /etc/apache2/apache2.conf говорим, что нам нужна поддержка нового протокола:
Protocols h2 h2c http/1.1
Что действительно важно — это h2. Два других пункта — на Ваше усмотрение. h2c — это поддержка HTTP/2 через TCP (а не TLS). http/1.1 — поддержка старой версии HTTP.
Включаем модуль http2 и перезагружаем сервер:
Как подключить PHP к Apache на Windows
Начнём с того, что скачаем самую новую версию PHP для Windows с официального сайта: https://windows.php.net/download/
Там несколько вариантов, которые различаются:
Выбирайте самую последнюю версию, с той битностью, какая у вашего сервера. Т.е. если у вас Apache 64-битный, то PHP также должен быть 64-битным. Всегда выбирайте Thread Safe версию.
Для каждого файла имеется две ссылки:
Выбирайте Zip, поскольку отладочный пакет только для тех, кто действительно знает, зачем он им нужен. Здесь имеется ввиду не отладка PHP-скриптов, а отладка самого интерпретатора PHP.
Настройка PHP в Windows
Настройка выполняется в два этапа:
Подключение PHP к Apache
Для подключения PHP к Apache откройте конфигурационный файл веб-сервера, который расположен по следующему пути: Apache24\conf\httpd.conf (в папке сервера, в подпапке conf, файл httpd.conf).
В этот файл добавьте три строки, две из которых нужно откорректировать:
В первой строке вместо C:/путь/до/PHP напишите точный путь до папки, куда вы распаковали файлы PHP. В третьей строке C:/путь/до/PHP/php8apache2_4.dll также откорректируйте путь, указав расположение PHP папки.
К примеру, я распаковал PHP в папку C:/Server/bin/PHP, тогда мои настройки следующие:
Если папка PHP находится в корне диска C, тогда эти строки должны быть такими:
Чтобы изменения вступили в силу, перезапустите веб-сервер или компьютер.
Настройка PHP
В папке PHP найдите файл php.ini-development и переименуйте его в php.ini – это нужно сделать обязательно, иначе PHP не будет видеть сделанные настройки.
Открываем файл php.ini любым текстовым редактором, ищем строчку
Обратите внимание, что вам нужно скорректировать строку C:\путь\до\PHP\ext\, указав конкретный путь до папки, где размещены файлы PHP.
У PHP (как и у Apache) имеется много расширений. Если вы не знаете, какое расширение для чего нужно, то как минимум два варианта:
Чтобы подключить большую часть расширений, найдите группу строк:
теперь раскомментируйте эту группу строк:
Мы подключили самые востребованные расширения, чтобы работало как можно больше функций PHP.
Пошаговая настройка 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. Я лиш приведу ознакомительный вариант настройки.
Подключение PHP к Apache
Если Вам понравился данный материал, поделитесь им с вашими друзьями в соц сетях
Основной особенностью веб-сервера Apache является расширяемость его функциональных возможностей, по средствам подключения различных дополнительных модулей. Каждый из них выполняет определенные задачи. Часть модулей разрабатывается командой Apache Software Foundation, другая часть, отдельными open source разработчиками.
Используя данный функционал, к веб-серверу Apache, возможно подключить, к примеру, поддержку различных языков программирования, таких как: PHP, PERL, Python, Ruby, ASP и др.
В одном из предыдущих материалов Установка Apache 2.4, был описан процесс установки и запуска локального веб-сервера Apache на ОС Microsoft Windows 7. Теперь подключим к нему язык программирования PHP. Какую версию PHP выбрать и где ее скачать описано в материале Что необходимо для установки веб-сервера?
Подключение PHP к Apache
Итак, имея в наличии, ранее скаченный архив с необходимой версией PHP, создадим в корне локального диска «C:\» директорию «php», и распакуем в нее содержимое архива.
Перейдем в директорию «C:\php\» и найдем 2 файла: «php.ini-development» и «php.ini-production». Эти файлы — примеры конфигурационных файлов PHP. Сделайте копию файла «php.ini-development» с именем «php.ini», в дальнейшем это будет основным конфигурационным файлом настройки PHP. Текущих настроек файла ««php.ini»» будет достаточно, для того, что бы подключить модуль PHP к веб-серверу Apache и проверить его корректную работу.
Теперь необходимо сообщить нашему веб-сервер Apache, что необходимо подключить модуль PHP.
Открываем конфигурационный файл веб-сервера «C:\Apache24\conf\httpd.conf» и раскомментируем следующие строки (данные строки отвечают за подключение необходимый модулей):
Сразу после блока с подключением модулей, добавляем в конф. файл следующие строки:
В первой строке указываем путь до директории с конфигурационным файлом PHP — «C:\php\php.ini».
Во второй строке говорим веб-серверу, что необходимо загружать модуль PHP, который отвечает за обработку php файлов, указывая при этом полный путь до библиотеки dll. Необходимо помнить, что имя библиотеки может отличаться от указанного.
В третей строке указываем расширение файлов, которые будут обрабатываться интерпретатором PHP.
Ниже в конфигурационном файле ищем блок:
и добавляем в конце второй строки «index.php»
Перезагружает веб-сервер любым удобным для Вас способом (используя ApacheMonitor, сервис Службы или командную строку). Если при перезагризки веб-сервера возникли ошибки и он не запустился, проверьте все измененые Вами данные, возможно была допущена опечатка в указании путей.
Проверяем работает ли PHP
После успешного запуска веб-сервера, необходимо проверить, что PHP работает. Для этого создаем в корневой директории управления сайтами «C:\Apache24\htdocs\» файл c именем «phpinfo.php», открываем его в текстовом редакторе и добавляем следующие строки:
phpinfo — это системная PHP-функция, выводящая различную информацию об интерпретаторе: настройки, текущие значения системных переменных и т.д.
Открываем в браузере страницу http://localhost/phpinfo.php. Если все настроено правильно, то странице Вы увидите таблицу с версией PHP и значением переменных.
Работа с конфигурационным файлом php.ini
Открываем конфигурационный файл php «C:\php\php.ini» в текстовом редакторе.
это значение указывает на директорию (каталог), в котором хранятся динамически загружаемые расширения.
раскомментируем и изменим значение директивы
Предлагаю разобраться, что нам дало выполнение данного действия и что такое динамически загружаемые расширения.
Если Вы откройте директорию «C:\php\ext», то увидите множество файлов с расширением .dll. Каждый из этих файлов и есть то самое динамически загружаемое расширение. Подключение данных расширений позволяют увеличивать функциональные возможности PHP.
Итак, путь до динамически загружаемых расширений мы указали, теперь давайте подключим наиболее важные и необходимые из них. Для это построчно раскомментируем необходимые расширения, удалив в начале каждой строки знак комментирования «;» (точка с запятой).
найдем блок Dynamic Extensions (Динамические Расширения)
раскомментируем необходимые расширения
По итогам изучения данного материала мы расширили функциональные возможности веб-сервера Apache подключив к нему модуль языка программирования PHP.
Как установить и настроить PHP 5 для запуска с Apache на Windows
Этапы настройки PHP 5
1. Загрузите PHP 5
2. Установите PHP 5
3. Тем, кто обновляет пакет: Удалите старый файл PHP.INI из каталога Windows
4. Настройка PHP
а) Включение коротких открывающих тегов
Найдите следующую строку:
При установке Apache PHP по умолчанию входящие данные автоматически не экранируются с помощью слэша. Если вы хотите, чтобы входные данные имели префикс обратной косой черты («»), например, чтобы воспроизводить настройки хостинга, найдите следующую строку:
c) Использование глобальных переменных
Если вы используете такие скрипты, нужно найти следующую строку:
Предупреждение : при установке PHP на Windows не делайте этого, если у вас нет сторонних скриптов, для работы которых это необходимо. При написании новых скриптов лучше всегда исходить из того, что для элемента register_globals установлено значение « Off «.
d) Отображение ошибок
Чтобы PHP отображал сообщения об ошибках прямо в окне браузера, найдите следующую строку:
Если скрипт использует сессии, найдите следующую строку:
session.save_path задает папку, в которой PHP сохраняет файлы сессии. Поскольку папка /tmp в Windows не существует, то нужно установить другую папку. Один из способов — создать папку с именем c:tmp ( как ранее мы создали c:php ) и указать для этого параметра данную папку. Если сделаете это, измените данную строку следующим образом:
Как настроить Apache для PHP 5
a) Запуск PHP 5 в качестве модуля Apache
Если вы использовали другой каталог, нужно будет изменить c:/php на правильный путь. Не забудьте применить косую черту ( «/» ).
Запуск PHP 5 в качестве бинарного файла CGI
Добавьте приведенные ниже строки сразу после раздела, который только что нашли.
c) Настройка индексной страницы по умолчанию
Перезапустите веб-сервер Apache
Тестирование установки PHP
После установки PHP 5 5 или другой версии языка создайте php-файл со следующей строкой:
Изучение PHP
Полное справочное руководство по установке PHP можно найти на официальном сайте технологии. Его можно посмотреть онлайн или загрузить для изучения в автономном режиме.
Пожалуйста, оставьте свои мнения по текущей теме статьи. Мы крайне благодарны вам за ваши комментарии, дизлайки, лайки, отклики, подписки!