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

Цей розділ містить замітки та підказки щодо встановлення 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 офіційно не підтримується і для нього не випускаються нові розробки чи виправлення.

  1. Завантаживши HTTP-сервер Apache за посиланням вище, його необхідно розпакувати:

    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. В цьому прикладі виконується проста конфігурація 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 та інші.

  6. Налаштування 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.

  7. Відредагуємо httpd.conf, щоб завантажувався модуль 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
    </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" у виробничому середовищі, де він може розкрити конфіденційну або іншу важливу інформацію, розміщену в коді.

  9. Краще застосовувати стандартну процедуру запуску сервера 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.

add a note

User Contributed Notes 2 notes

up
16
nmmm at nmmm dot nu
15 years ago
When I upgrade to apache 2.2, this:

AddType application/x-httpd-php .php5
AddType application/x-httpd-php .php42
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtm
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .asp

...does not worked for me, so I did this:

<FilesMatch "\.(php*|phtm|phtml|asp|aspx)$">
SetHandler application/x-httpd-php
</FilesMatch>

Another interesting point with Apache 2.2 is following.
Let suppose we installed PHP as module. But for some directory, we need to use PHP as CGI (probably because of custom configuration). This can be done using:

<FilesMatch "\.(php*|phtm|phtml|asp|aspx)$">
SetHandler none
</FilesMatch>

AddType application/x-httpd-php-custom .php
Action application/x-httpd-php-custom /cgi-bin/php-huge

Note type must be different than "application/x-httpd-php" and also you need to deactivate the handler on sertain extention. You can do mixed configuration:

<FilesMatch "\.(php)$">
SetHandler none
</FilesMatch>

AddType application/x-httpd-php-custom .php
Action application/x-httpd-php-custom /cgi-bin/php-huge

in such case files like *.php5 and so on will be parsed via module, but *.php will go to php-huge executable.
up
8
Morning Star
2 years ago
I had just installed php8.1.12 on a machine used for writing C code.

Below are some libraries that I needed to download on a debian-based OS.

apt-get install libpcre3 libpcre3-dev
apt-get install apache2-dev
apt-get install libxml2-dev
apt-get install libsqlite3-dev

These were the missing packages that I required.
If you get an error regarding a missing package or library, for example when I needed sqlite3, run the command:

apt search sqlite3

And you'll be able to see if there's any dev or lib packages.

The apache2 instructions worked flawlessly at the time of php8.1.12; and in order to get certain requirements for an application, I had to run the php configure file like so:

./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql --with-mysqli --with-zip --enable-gd

The extra flags allowed me to use both types of mysql, allowed me to utilize PHP zip archiving, and allowed me to use Gnatt stuff.
To Top