Apache2 для Debian

Содержание
========
Конфигурация Apache2 под Debian GNU/Linux
Файлы и каталоги в «/etc/apache2»
Инструменты
Использование mod_cache_disk
SSL
Включение SSL
Создание самоподписанных сертификатов
Обходной путь SSL для MSIE
Suexec
Документация
Обновления
Общие проблемы
Для разработчиков
Конфигурация Apache2 под Debian GNU/Linux
=======================================
При установке по умолчанию Apache2 в Debian пытается добавить и удалить модули виртуальных хостов и дополнительных директив конфигурации, редактируя систему оптимальным образом, чтобы максимально автоматизировать систему, для дальнейшего обновления и максимально простого администрирования сервера.

Имейте в виду, что этот пакет сильно отличается от стандартной конфигурации apache2 из-за использования переменных окружения.

Сервер необходимо запустить/остановить с помощью команд '/etc/init.d/apache2', apachectl или apache2ctl. Прямой вызов инструкции '/usr/bin/apache2' не будет работать с конфигурацией, которая настроена по умолчанию. Чтобы вызвать apache2 с определенной командной, просто вызовите apache2ctl с теми же аргументами как и в стандартных случаях.

Файлы и каталоги в «/etc/apache2»:
--------------------------------------
Файл apache2.conf
Это основной файл конфигурации. Он не вносит никаких нестандартных изменений, которые могли-бы состояться на вашем сервере, поэтому по возможности не трогайте его. Этот файл является краеугольным камнем конфигурации Apache в Debian и должен содержать все части конфигурации для их изменения при обновлении.

Если Вы всё-таки хотите расширить глобальную конфигурацию, вы можете настроить веб-сервер Apache2, включив файлы конфигурации через conf-доступный механизм. Чтобы изменить порты прослушивания и сокет для настройки используйте ports.conf (см. ниже).

ports.conf - Порты и ip-адреса соответствующие определённым директивам конфигурации.

Волшебство
Шаблоны для mod_mime_magic не совместимы с текущим форматом file/libmagic пакетов .

Окружение

Окружение содержит переменные среды, которые могут использоваться в конфигурации. Некоторые настройки, такие как файл пользователя и pid (для пользователя root он соответствует значению 1000), здесь необходимо вносить изменения, чтобы другие скрипты могли их использовать. Это также может использоваться для изменения некоторых настроек по умолчанию, используемых apache2ctl, например путём изменения значения ulimit, для максимального количества открытых файлов. Параметр по умолчанию LANG=C также находится здесь, и его можно изменить на другой язык.

conf-available/
Файлы в этом каталоге включены в глобальную область сервера.
Этой строкой в apache2.conf является: "IncludeOptional conf-enabled/*.conf", что значит - Включить общие фрагменты операторов

Это хорошее место для добавления дополнительной конфигурации директивы. Все фрагменты конфигурации должны иметь суффикс «.conf», такие фрагменты включены как действующие при конфигурации.

Администратор локального сервера должен использовать имена файлов начинающиеся с «local-», чтобы избежать конфликтов имен с файлами, установленными в результате работы пакетов.

Фрагменты конфигурации можно включать и отключать с помощью исполняемых файлов a2enconf и a2disconf. Это работает аналогично тому случаю как при том подходе, когда используются модули и сайты описанные ниже.

Такие фрагменты конфигурации, также могут быть включены в отдельные виртуальные хосты.

conf-enabled/
Подобно mods-enabled/ и sites-enabled/, часть конфигурации включается символической ссылкой на файл из каталога conf-available/. Команда a2enconf предназначена для активации соответствующей директивы.

mods-available/
Эта директива содержит ряд файлов .load и .conf. Файлы .load содержат инструкции для конфигурации программного сервера Apache2. Они необходимы для загрузки рассматриваемого модуля. Соответственно Файлы .conf содержат инструкции для конфигурации, необходимые для использования соответствующего модуля.

mods-enabled/
Чтобы фактически включить модуль для Apache2, необходимо создать символическую ссылку в этой директиве на инструкцию .load соответствующего модуля (в данном случае Apache2) и инструкцию .conf, если она существует.

Например:

mods-available/
cgi.load -> /etc/apache2/mods-available/cgi.load
Команду a2enmod нужно использовать для активации модуля.

sites-available/
Как у mods-available/, за исключением тех случаев, когда содержится конфигурация директив для разных виртуальных хостов, которые могут использоваться с Apache2. Обратите внимание на то, что имя хоста не обязательно должно соответствовать имени файла с инструкцией.

"000-default.conf" используется по умолчанию.

Хост (host), который предоставляется Debian.

sites-enabled/
По функциональности аналогична mods-enabled/, sites-enabled/ содержит символические ссылки на сайты в site-available/, которые администратор хочет включить.

Apache2 использует первый виртуальный хост, который соответствует IP-адресу сетевой карты физического сервера. Такой порядок установлен по умолчанию, для удобства именования остальных виртуальных хостов. Поэтому сервер по умолчанию должен быть проинструктирован из файла «000-default.conf» для того, что-бы он стандартно сортировался с другими виртуальными хостами на сервере.

Пример:
dedasys.conf -> /etc/apache2/sites-available/dedasys.conf.

Команда a2ensite используется для активации вновь настроенного виртуального хоста.
Директива Include игнорируют файлы с именами, которые не заканчиваются на суффикс .conf. Это свойство стало актуальным в последних версиях сервера!

Если понадобится включить определенную часть конфигурации для конкретного виртуального хоста, тогда обратите внимание на файлы инструкций расположенных в директиве conf-available/.

В этом случае необходимо отключить глобальную конфигурацию, выполнив команду a2disconf. Затем нужно включить новую конфигурацию, для отдельного модуля в директиве sites-available/ с соответствующей инструкцией.

Однако будьте осторожны, так как это может не сработать, из-за каскадного эффекта загрузки инструкций настройки в оперативную память сервера, при активации новой конфигурации.

Инструменты (команды)
-----
Команды a2enmod и a2dismod применяются для включения и отключения соответственно, модулей, использующих вышеуказанную систему конфигурации.

a2ensite и a2dissite делают то же самое, что и вышеупомянутые инструменты, но для сайтов, а не модулей.

Наконец, a2enconf и a2disconf — это соответствующие инструменты для фрагментов конфигурации.

a2query — это вспомогательный скрипт (инструмент), предоставляющий во время выполнения (работы) информацию о запущенных экземплярах серверов.

Например, его можно использовать для запроса информации о включенных модулях, выбранный MPM и другую информацию. Этот инструмент в первую очередь предназначен для сопровождающего пакета , с которым необходимо взаимодействовать серверу Apache2 для его активации.

Администратор сервера так-же может активировать составляющие пакета (модулей) без участия сервера Apache2.
apxs2 -a/-A применяется при модификации модуля, а a2enmod при активации нового модуля.

Использование mod_cache_disk
=====================

Для того, чтобы кешь диска не увеличивался бесконечно, используется утилита htcacheclean, в случае когда модуль mod_cache_disk работает в режиме демона cron (ежедневно). Конфигурация (режим запуска, размер кэша и т. д.) находится в директиве " /etc/apache2".

Обычно htcacheclean автоматически запускается и останавливается работой /etc/init.d/apache2 инструкции. Однако, если вы измените состояние mod_cache_disk или конфигурации htcacheclean во время работы apache2, вам может понадобиться вручную запустить/остановить htcacheclean с помощью запуска инструкций /etc/init.d/apache2, start-htcacheclean или /etc/init.d/apache2, stop-htcacheclean.

Обратите внимание, что mod_cache_disk назывался mod_disk_cache в версиях 2.2 и более ранних.

SSL
===
Включение SSL
------------

Чтобы включить SSL, введите (от имени пользователя root):
a2ensite default-ssl
a2enmod ssl

Если вы хотите использовать само-подписанные сертификаты, вам следует установить ssl-cert пакет (см. ниже).

В противном случае просто настройте SSLCertificateKeyFile и в файле конфигурации "/etc/apache2/sites-available/default-ssl.conf" укажите путь к Вашему SSL-сертификату. Затем перезапустите апач командой:
service apache2 restart

Файл ключа SSL должен быть доступен для чтения только пользователю root, а файл сертификата может быть глобально читаемым. Эти файлы читаются родительским процессом Apache2, который запускается как root, и поэтому нет необходимости делать эти файлы доступными для чтения пользователю с правами www-data.

Создание само-подписанных сертификатов
----------------------------------

Если вы установите пакет ssl-cert, само-подписанный сертификат будет автоматически создаваться с использованием имени хоста, настроенного в данный момент на вашем сервере.

Вы должны будете перевыпустить этот сертификат (например, после того, как вы произвели изменения в директиве «/etc/host» или «/etc/bind», чтобы прописались новые значения имени хоста) от имени пользователя root, таким образом:
make-ssl-cert generate-default-snakeoil --force-overwrite

Чтобы создать больше сертификатов с разными именами хостов, вы можете использовать инструкцию:
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /path/to/cert-file.crt

Эта команда запросит у вас имя хоста и поместит, как ключ SSL, так и сертификат в файл "/path/to/cert-file.crt". Используйте этот файл с SSLCertificateFile в конфигурации Apache2 (вам не нужен SSLCertificateKeyFile в том случае, если он уже содержит ключ).

Файл "/path/to/cert-file.crt" должен быть доступен для чтения только пользователю root. Самый подходящий каталог для дополнительных сертификатов и ключей — это «/etc/ssl/private».

Обходной путь SSL для MSIE
-----------------------

Обходной путь SSL для MS Internet Explorer должен быть добавлен в ваш SSL Раздел VirtualHost (ранее он был в ssl.conf, но из-за этого не работали подключения без SSL) в таких браузерах, как:

BrowserMatch "MSIE [2-6]"

nokeepalive ssl-unclean-shutdown

downgrade-1.0 force-response-1.0

BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

Виртуальный хост SSL по умолчанию находится в "/etc/apache2/sites-available/default-ssl.conf" и это, уже содержит этот обходной путь.

Suexec
======

Debian поставляет две версии вспомогательной программы suexec, необходимые для mod_suexec. Модуль не установлен по умолчанию, чтобы избежать возможных рисков, в вопросах безопасности.

Пакет apache2-suexec-pristine содержит стандартную версию модуля, который работает только с корнем документа /var/www и суффиксом пользовательской директории public_html и Apache, запускает файлы только группы www-data.

Пакет apache2-suexec-custom содержит настраиваемую версию, которую можно настроить с помощью файла конфигурации содержащего различные настройки (например, /srv/www в качестве корня документа).

Чтобы получить больше информации - см. справочную страницу suexec(8) в пакете apache2-suexec-custom.

Поскольку apache2-suexec-custom подвергался меньшему тестированию и может немного медленнее, чем apache2-suexec, поэтому он является менее рекомендуемой версией, если вам не нужны функции из apache2-suexec-custom.

Начиная с Apache 2.4 обе альтернативы можно установить одновременно. Время и механизм suexec по умолчанию можно выбрать с помощью системы update-alternatives(8).

Нормализация имени файла Unicode
================================

Использование Apache2 с корнем документа в файловой системе, поддерживающей юникод

Нормализация имен файлов может вызвать проблемы с безопасностью. В Debian это влияет на ZFS с опцией не по умолчанию, если включить нормализацию имени файла, и HFS+. Настоятельно не рекомендуется использовать Apache с такими файловыми системами.

Дополнительную информацию об этой проблеме можно найти, выполнив поиск в Интернете по запросу: CVE-2013-0966.

Документация
==============

Полную документацию по Apache 2 можно найти в Интернете по адресу: "http://httpd.apache.org/docs/2.4/" или, если вы установили пакет apache2-doc, то в "/usr/share/doc/apache2-doc/manual/" или на "http://localhost/manual/".

Существует также вики, которая содержит полезную информацию: "http://wiki.apache.org/httpd/". Некоторые советы по обеспечению безопасности Apache2 в Debian доступны по адресу: "http://wiki.debian.org/Apache/Hardening"

Обновления
========

Изменения в пакетах Apache2, требующие ручной корректировки конфигурации объявляются в NEWS.Debian. Рекомендуется установка пакета apt-listchanges. Он отображает соответствующие разделы NEWS.Debian для обновления.

Несколько экземпляров
==================

Существует поддержка запуска нескольких экземпляров Apache2 на одном сервере. См. "/usr/share/doc/apache2/README.multiple-instances", для получения дополнительной информации.

Типичные проблемы
===============


1) Сообщение об ошибке "Не удалось достоверно определить полную квалификацию сервера. Доменное имя использует 127.0.0.1 для ServerName" во время запуска.
Обычно это можно игнорировать, но это означает, что Apache httpd не смог получить полное имя хоста, выполнив обратный поиск по IP-адресу вашего сервера.В этом случае Вы можете добавить полное имя хоста в "/etc/hosts".
Альтернативой является указание «ServerName 127.0.0.1» в глобальном сервере или контекст конфигурации, например, в "/etc/apache2/conf-enabled/local-servername.conf".

2) Сообщение об ошибке "mod_rewrite: не удалось создать rewrite_log_lock". Вероятно, это означает наличие устаревших семафоров SYSV. Это обычно происходит после того, как apache2 был убит командой kill -9 (SIGKILL). В этом случае Вы можете очистить семафоры с помощью команды:
ipcs -s | grep www-data | awk '{ print $2 } ' | xargs ipcrm sem

3) Сообщение «Файл не существует: /etc/apache2/htdocs» в журнале ошибок.
В большинстве случаев это означает, что никакое подходящее определение VirtualHost не может быть найдено для входящего запроса. Убедитесь, что целевой заголовок запроса, IP-адрес/порт и имя в /etc/host - фактически соответствует одному из виртуальных хостов.

4) Сообщение «Не удалось создать опрос в дочернем элементе; проверьте ограничения пользователя или системы» в журналe ошибок
В ядрах Linux начиная с версии 2.6.27.8, значение в "/proc/sys/fs/epoll/max_user_instances" должно быть больше, чем для prefork/itk MPM: 2 * MaxClients для worker/event MPM: MaxClients + MaxClients/ThreadsPerChild. Его можно установить при загрузке, добавив строку вида: "fs.epoll.max_user_instances=1024" в "/etc/sysctl.conf".
Существует несколько других сообщений об ошибках, связанных с созданием опроса, которые могут появляются по той же причине.
С другой стороны, ошибки при добавлении в опрос связаны с настройкой fs.epoll.max_user_watches. В большинстве систем, значение max_user_watches должно быть высоким. Оно достаточно высокое по умолчанию.

5) Сообщение «Сервер должен поддерживать SSL, но не настроен сертификат» в журнале ошибок. Начиная с версии 2.2.12, Apache строже относится к некоторым неверным конфигурациям, касающимся виртуальных хостов на основе имени SSL . Подробности смотрите на NEWS.Debian.gz.

6) Apache2 не передает заголовок авторизации CGI-скриптам
Это сделано намеренно, чтобы избежать дыр в безопасности. Если ты действительно хочешь изменить это, то можешь использовать mod_rewrite:
RewriteCond %{HTTP:Authorization} (.*)
RewriteRule . - [env=HTTP_AUTHORIZATION:%1]

7) mod_dav ведет себя странно
В общем, если вы используете mod_dav_fs, вам нужно отключить мульи просмотр и исполнение для этого каталога.
Например:
<Directory /var/www/dav>
Dav on
Options -MultiViews -ExecCGI
SetHandler none
multiviews and script
<IfModule mod_php5.c>
php_admin_value engine Off
</IfModule>
</Directory>

8) Сообщение «apache2: неправильное имя пользователя ${APACHE_RUN_USER}» при запуске apache2 напрямую.
Используйте apache2ctl (он принимает все те же параметры, что и apache2).

9) A PUT with mod_dav_fs fails with "Unable to PUT new contents for /...
[403, #0]", даже если у Apache2 есть разрешение на запись файла.
Apache2 также требуется разрешение на запись в каталог, содержащий файл, что-бы заменить его атомарно.

10) При запуске/перезагрузке Apache2 появляется сообщение об ошибке: "ulimit: open files: cannot modify limit: Operation not permitted"
Если вы используете Apache2 в среде vserver, сценарий запуска может не работать. Можно установить максимальное количество открытых файлов. Для этого Вы должны настроить: "ulimit: open files: cannot modify limit: Operation not permitted".
Вы можете: отключить изменение лимитов, установив APACHE_ULIMIT_MAX_FILES=true.

For Developers
==============


Пакет веб-сервера Apache2 предоставляет несколько инструкций, упраляющих установкой для лучшего взаимодействия с веб-сервером как для сборки, так и для оптимизации рабочего времени. Пожалуйста, обратитесь к файлу PACKAGING в пакете apache2 для более подробной информации.