Apache 2.x на Unix системах

Цей розділ описує інсталяцію PHP з Apache 2.x на Unix системах.

Увага

Ми не рекомендуємо використовувати потоковий MPM у промисловому середовищі разом з Apache 2. Замість цього використовуйте prefork MPM, що використовується за умовчанням в Apache 2.0 та 2.2. Детальну інформацію з цього питання ви можете знайти у відповідному розділі FAQ Apache2 та потоковий MPM

Найавторитетнішим джерелом інформації з Apache 2.x є » документація Apache. Більш детальну інформацію про налаштування під час встановлення можна знайти там.

Остання версія Apache Http Server може бути отримана на » сторінці завантаження Apache, а адреса відповідної версії PHP була вказана вище. Цей короткий посібник визначає лише базову установку Apache 2.x і PHP. Для отримання більш детальної інформації прочитайте » документацію Apache. . В інструкції нижче опущені номери версій - замініть 'NN' на номер, що відповідає завантаженій вами версії Apache.

На даний момент є дві версії Apache 2.x – 2.4 та 2.2. Хоча для вибору кожної з них існують окремі докази, 2.4 є найсвіжішою та рекомендованою версією, якщо вас влаштовує такий вибір. Проте, ці інструкції будуть працювати як для 2.4, так і для 2.2. Зверніть увагу, що Apache httpd 2.2 офіційно більше не підтримується, тому подальша розробка не буде продовжуватися, як і прийматися нові патчі.

  1. Завантажте Apache HTTP server як було зазначено вище та розпакуйте його:

    tar -xzf httpd-2.x.NN.tar.gz
    
  2. Аналогічно, скачайте та розпакуйте вихідні коди PHP:

    tar -xzf php-NN.tar.gz
    
  3. Скомпілюйте та встановіть Apache. Докладнішу інформацію про збірку Apache дивіться у документації.

    cd httpd-2_x_NN
    ./configure --enable-so
    make
    make install
    
  4. Тепер ваш Apache 2.x.NN доступний як /usr/local/apache2, налаштований з підтримкою модулів, що підвантажуються, і стандартним мульти-процесним модулем (MPM) prefork. Щоб протестувати правильність установки, використовуйте стандартну процедуру запуску Apache, таку як:

    /usr/local/apache2/bin/apachectl start
    

    Потім зупиніть сервер, щоб налаштувати та встановити PHP:

    /usr/local/apache2/bin/apachectl stop
    
  5. Тепер ми налаштуємо та зберемо PHP. Тут ви можете налаштувати інсталяцію PHP за допомогою різних опцій, які вказують, наприклад, які модулі потрібно увімкнути. Перегляньте виведення команди ./configure --help для отримання повного списку параметрів конфігурації. У нашому прикладі ми налаштуємо PHP дуже просто - з підтримкою Apache та MySQL.

    Якщо ви збирали 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 для командного рядка (PHP CLI) і т.д.

  6. Налаштування вашого php.ini

    cp php.ini-development /usr/local/lib/php.ini
    

    Ймовірно, ви захочете змінити деякі налаштування у php.ini. Якщо ви хочете тримати файл php.ini в іншому місці, використовуйте параметр --with-config-file-path=/some/path у кроці 5.

    Якщо ж ви використовуєте php.ini-production, прочитайте його, щоб знати, які зміни в поведінці PHP це спричинить.

  7. Відредагуйте httpd.conf, щоб Apache завантажував модуль PHP. Шлях у правій частині вказівки LoadModule повинен вказувати на модуль PHP. Команда make install може додати цю інструкцію автоматично, але цього може і не статися, тому перевірте, щоб переконатися.

    Для PHP 8:

    LoadModule php_module modules/libphp.so

    Для PHP 7:

    LoadModule php7_module modules/libphp7.so

  8. Тепер слід налаштувати Apache, щоб він передавав файли з деякими розширеннями на обробку PHP модуля. У прикладі зробимо це для .php файлів. Замість звичайного використання директиви Apache AddType, ми хочемо уникнути інтерпретації як PHP потенційно небезпечних завантажень та файлів на зразок exploit.php.jpg. За допомогою цього прикладу можна вказати для інтерпретації PHP будь-які розширення, просто додавши їх до кінця списку. Продемонструємо це на розширенні .php.

    <FilesMatch \.php$> SetHandler application/x-httpd-php

    Або, якщо ми хочемо додати розширення .php, .php2, .php3, .php4, .php5, .php6 та .phtml, це можна записати так:

    <FilesMatch "\.ph(p[2-6]?|tml)$"> SetHandler application/x-httpd-php

    Щоб PHP відображав вміст .phps з підсвічуванням синтаксису, потрібно внести відповідну директиву

    <FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source

    Можна використовувати mod_rewrite для відображення будь-якого .php файлу з підсвічуванням синтаксису, без потреби його перейменування в .phps:

    RewriteEngine On RewriteRule (.*\.php)s$ $1[H=application/x-httpd-php-source]

    Цей фільтр, який відображає вихідний код, повинен бути вимкнений у промисловому використанні, оскільки він може відкрити конфіденційну або іншу важливу інформацію, включену до вихідного коду.

  9. Використовуйте стандартну процедуру запуску Apache, наприклад:

    /usr/local/apache2/bin/apachectl start
    

    АБО

    service httpd restart
    

Якщо ви дотримувалися інструкцій вище, то на даному етапі повинні мати запущений веб-сервер Apache2 з підтримкою PHP як модуля SAPI. Звичайно, для PHP і Apache є набагато більше параметрів конфігурації. Використовуйте ./configure --help у відповідній папці з вихідними кодами, щоб отримати повний список параметрів конфігурації.

Якщо ви бажаєте зібрати багатопотокову версію Apache, то при складанні вам слід вказати модуль MPM worker замість стандартного модуля MPM prefork. Щоб зробити це, потрібно додати наступний аргумент до ./configure на кроці 3:

--with-mpm=worker

Не слід бездумно використовувати це налаштування, використовуйте його лише якщо ви розумієте всі наслідки цього рішення. Документація Apache з » модулям MPM значно глибше розкриває цю тему.

Зауваження :

Якщо ви хочете використовувати залежний контент (content negotiation), прочитайте Apache MultiViews FAQ

Зауваження :

Для складання багатопоточної версії Apache, ваша система має підтримувати потоки. Це також передбачає збірку PHP з підтримкою Zend Thread Safety (ZTS). І, як наслідок, не всі PHP модулі зможуть працювати. Рекомендується встановлення Apache з модулем MPM за промовчанням - prefork.