Цей розділ містить замітки та підказки щодо встановлення Apache 2.x з PHP в системи Unix.
Ми не рекомендуємо використовувати потоковий MPM у виробничому середовищі з Apache 2. Замість нього краще обрати prefork MPM, який початково йде з Apache 2.0 та 2.2. Докладніше — у розділі Apache 2 з потоковим MPM
» Документація на сайті Apache є найбільш авторитетним джерелом інформації про сервер Apache 2.x. Там можна знайти більше інформації про параметри його інсталяції.
Найновішу версію HTTP-сервера Apache можна отримати на » сторінці завантаження Apache. Також треба завантажити потрібну версію PHP (див. навігаційну панель вгорі). Тут є лише короткий опис базового встановлення Apache 2.x та PHP. Детальнішу інформацію можна прочитати в » Документації Apache. Зазначення конкретного номера версії навмисно оминається, щоб не плутати користувачів наведених тут інструкцій. Внизу в прикладах, 'NN' потрібно замінити версією Apache, яка буде використовуватись.
На даний момент є дві версії Apache 2.x - це 2.2 та 2.4. Хоча є певні причини для вибору однієї чи іншої версії, але 2.4 є зараз найновішою та рекомендованою. Тим не менш, наведені тут інструкції мають працювати для обох версій. Варто зазначити, що Apache httpd 2.2 офіційно не підтримується і для нього не випускаються нові розробки чи виправлення.
Завантаживши HTTP-сервер Apache за посиланням вище, його необхідно розпакувати:
tar -xzf httpd-2.x.NN.tar.gz
Таким же способом необхідно розпакувати файли з початковим кодом PHP:
tar -xzf php-NN.tar.gz
Далі потрібно зібрати та встановити Apache. Докладніші рекомендації є в документації щодо встановлення Apache.
cd httpd-2_x_NN ./configure --enable-so make make install
Тепер Apache 2.x.NN доступний за адресою /usr/local/apache2, зі встановленим стандартним модулем MPM prefork та конфігурацією, яка дозволяє додавати інші потрібні модулі. Для перевірки інсталяції використовується звичайна процедура запуску сервера Apache, наприклад:
/usr/local/apache2/bin/apachectl start
/usr/local/apache2/bin/apachectl stop
Тепер треба налаштувати та зібрати PHP. Наприклад, визначити, які саме розширення будуть включені в PHP. Для перегляду списку доступних параметрів необхідно запустити ./configure --help. В цьому прикладі виконується проста конфігурація Apache 2 з підтримкою MySQL.
Якщо Apache було зібрано вручну, як описано вище, в наступному прикладі шлях буде відповідати розташуванню apxs, але якщо Apache встановлено по-іншому, то потрібно змінити шлях до apxs. Варто зауважити, що деякі дистрибутиви можуть перейменувати apxs на apxs2.
cd ../php-NN ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql make make install
Для зміни конфігурації після інсталяції, потрібно заново виконати кроки: configure, make та make install. Після цього перезапустити Apache, щоб зміни були застосовані. Перекомпільовувати Apache не потрібно.
Варто зауважити, що якщо не сказано іншого, то команда make install також встановлює » PEAR, різноманітні інструменти PHP, як от phpize, PHP CLI та інші.
Налаштування php.ini.
cp php.ini-development /usr/local/lib/php.ini
Можна редагувати файл .ini
, додаючи потрібні опції PHP.
Для розміщення php.ini в іншому місці
використовується опція
--with-config-file-path=/some/path
на 5-му кроці.
Якщо буде обрано php.ini-production, краще прочитати
список відмінностей між файлами .ini
, щоб розуміти як це
вплине на поведінку PHP.
Відредагуємо httpd.conf, щоб завантажувався модуль
PHP. Шлях, який зазначено праворуч від оператора
LoadModule
, повинен вказувати на розташування модуля PHP
у системі. Згадана раніше команда make install повинна
це робити, але краще перевірити.
Для PHP 8:
LoadModule php_module modules/libphp.so
Для PHP 7:
LoadModule php7_module modules/libphp7.so
Скажемо Apache обробляти файли з певним закінченням через PHP. Наприклад, з
.php
. Замість того, щоб використати лише директиву
Apache AddType
, краще не дати обробити через PHP
потенційно небезпечні завантаження та створені файли на кшталт
exploit.php.jpg. Використовуючи наступний приклад,
можна додати будь-яке (і не одне) закінчення, яке потрібно обробляти через
PHP. Тут .php
вказано суто для прикладу.
<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>
Або ж, якщо треба дозволити PHP обробляти файли .php
,
.php2
, .php3
,
.php4
, .php5
,
.php6
та .phtml
, але ніякі інші,
то можна використати такий код:
<FilesMatch "\.ph(p[2-6]?|tml)$"> SetHandler application/x-httpd-php </FilesMatch>
Для обробки .phps
через "php source filter" з метою
показувати їх вміст з підсвічуванням синтаксису, використовується таке:
<FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch>
Можна використовувати модуль mod_rewrite
, щоб дозволити
показувати початковий код з підсвічуванням синтаксису в файлах із
закінченням .php
без необхідності переназивати їх чи
копіювати їхній код до файлів .phps
:
RewriteEngine On RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
Не слід вмикати "php source filter" у виробничому середовищі, де він може розкрити конфіденційну або іншу важливу інформацію, розміщену в коді.
Краще застосовувати стандартну процедуру запуску сервера Apache:
/usr/local/apache2/bin/apachectl start
АБО:
service httpd restart
Дотримуючись зазначених вище кроків можна запустити вебсервер Apache2 з
підтримкою PHP як модуля SAPI
. Звичайно, є значно більше
параметрів, доступних для Apache та PHP. Більше інформації можна отримати,
ввівши в консолі ./configure --help в кореневих теках
початкових файлів.
Apache можна зробити багатопотоковим, вибравши worker MPM замість стандартного prefork MPM під час збирання Apache, додавши наступний параметр до ./configure на 3-му кроці:
--with-mpm=worker
Не варто бездумно використовувати цю опцію, а тільки, якщо відомо про всі наслідки такого рішення. В документації для Apache стосовно » модулів MPM значно детальніше розкрита ця тема.
Зауваження:
У розділі ЧаПи про Apache MultiViews обговорено використання цієї опції разом з PHP.
Зауваження:
Щоб зібрати версію багатопотокового Apache, цільова система повинна мати підтримку потоків. В такому разі PHP потрібно також збирати з Zend Thread Safety (ZTS). Цю конфігурацію підтримують не всі розширення. Рекомендовано встановлювати Apache зі стандартним модулем prefork MPM.