Debian Jessie: Настройка apache2 + libapache2-mod-php5

Это статья из цикла стетей моего небольшого HowTo по Debian Jessie.

В данной статье мы установим и базово настроим apache2 — один из компонентов самой простой и популярной схемы WEB hosting-ов:

nginx -> apache2 -> mod_php5

Новичкам часто непонятно, зачем в современном вебе досих пор используется apache? Ведь Nginx якобы эффективно отдает статику (png, jpg, css, js … etc), а php-fpm отлично работает с php-кодом и подружить их вместе не составляет труда. Но тут есть небольшая ложка дегтя в виде файлов .htaccess/.htpasswd которые не умеет обрабатывать nginx, а apache умеет 🙂 Данные файлики очень часто используются web-мастерами для различного рода настроек, таких например как реврайты, права доступа, опции php и тд. Простыми словами, это дает пользователю возможность самому, без перезапуска сервисов, настраивать множество нюансов связанных как с apache так и с php. В отличии от этого, перенастройка компонентов связки Nginx + PHP-FPM возможна только со стороны админа и требует перезапуска сервиса.

Для начала установим apache2 и модули php5, rpaf для него:

gw~$ sudo apt-get install apache2-mpm-itk libapache2-mod-php5 libapache2-mod-rpaf

Напомню, что apache2 у нас будет бэкендом за nginx. Поэтому в конфиге /etc/apache2/ports.conf настроим чтобы apache2 принимал соединения только на localhost и только на порту 8080. Для этого в данном конфиге нужна только одна строчка, остальное комментируем:

Listen 127.0.0.1:8080

Также нужно поменять порт в дефолтном VirtualHost с 80 на 8080 (если у вас уже был apache2 и есть виртуалхосты — меняйте во всех виртуалхостах). Вот в этом файлике /etc/apache2/sites-available/000-default.conf в самом начале делаем так:

<VirtualHost *:8080>
...

Мы установили еще и модуль rpaf, он служит для передачи реального IP клиента nginx на apache2, если не настроить этот модуль, то в лог файле apache2 все клиенты будут с IP 127.0.0.1 Данный модуль обычно включается автоматически при установке, но на всякий случай выполняем:

gw:~$ sudo a2enmod rpaf
Module rpaf already enabled
gw:~$

Открываем основной конфиг /etc/apache2/mods-available/rpaf.conf:

gw:~$ sudo vim /etc/apache2/mods-available/rpaf.conf

И приводим его к такому виду:

<IfModule rpaf_module>
    RPAFenable On

    # When enabled, take the incoming X-Host header and
    # update the virtualhost settings accordingly:
    RPAFsethostname On

    # Define which IP's are your frontend proxies that sends
    # the correct X-Forwarded-For headers:
    RPAFproxy_ips 127.0.0.1

    # Change the header name to parse from the default
    # X-Forwarded-For to something of your choice:
    RPAFheader X-Real-IP
</IfModule>

В дальнейшем не забываем в конфигах nginx указывать параметр в локейшенах с проксированием:

proxy_set_header X-Real-IP $remote_addr;

Частой проблемой после настройки apache2 является вот такой Warning:
AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using _some_address_. Set the ‘ServerName’ directive globally to suppress this message
Он значит что глобально для сервиса не задано имя сервера, исправить это можно добавив в основной конфиг /etc/apache2/apache2.conf опцию ServerName:

ServerName localhost

Также, в целях безопасности, отключим вывод подробной информации о web сервере. Для этого в конфиге /etc/apache2/conf-enabled/security.conf приведем две опции к следующему виду:

ServerTokens Minimal
ServerSignature Off

Включаем модуль php5 для apache2:

gw:~$ sudo a2enmod php5

Включаем модуль rewrite для apache2:

gw:~$ sudo a2enmod rewrite

Хорошим правилом является проверка корректности конфига перед перезапуском сервиса, для apache2 это делается так:

gw:~$ sudo apachectl configtest
Syntax OK
gw:~$

Перезапускаем сервис apache2:

gw~$ sudo systemctl restart apache2.service

Проверяем что порт и хост «слушается» тот что нам нужен:

gw~$ sudo netstat -lnp |grep 80
tcp  0   0   127.0.0.1:8080    0.0.0.0:*   LISTEN   10875/apache2
gw~$

Вот и отлично, apache2 слушает только порт 8080 адрес 127.0.0.1 — так мы и хотели.
Напомню, что тут описаны базовые моменты, чуть позже я опишу настройку nginx, а после этого мы сможем полноценно испытать связку nginx + apache2 на примере разворачивания реального сайта.

Хай щастить!

  1. Комментов пока нет

  1. Трэкбэков пока нет.

Why ask?