Введение
Apache — на данный момент самый широко используемый веб-сервер в мире. Это программное обеспечение с открытым исходным кодом, разработанное более двадцати лет назад и поддерживаемое the Apache Software Foundation. По состоянию на сентябрь 2020 года, по оценкам, он обслуживает 35% of all website traffic in the world.
Разработчики предпочитают Apache за его скорость, безопасность, надежность, отказоустойчивость и простоту настройки. Кроме того, Apache способен удовлетворить потребности многих сред, так как позволяет устанавливать различные расширения и модули. Это возможно благодаря набору конфигураций, которые разработчики и администраторы серверов могут изменять для различных целей. В этом руководстве мы расскажем вам о общих конфигурационных файлах и параметрах, которые могут влиять на различные результаты на серверах Ubuntu и Debian.
Debian и Ubuntu входят в число наиболее популярных серверных операционных систем. У них много общего. Например, обе они используют APT package manager и DEB packages для ручной установки. Они одинаково обрабатывают настройки Apache и структуру каталогов. Следовательно, вы сможете следовать этому руководству в любой из этих операционных систем. Сначала вы можете воспользоваться этим руководством по настройке сервера Ubuntu за несколько шагов.
Затем войдите в систему как пользователь без прав root, но с привилегиями sudo, и давайте начнем!
Как установить Apache на Ubuntu and Debian
Если на вашем сервере еще не установлен Apache, вы можете легко установить его с помощью одной команды. Сначала запустите команду обновления:
|
1 |
sudo apt-get update |
Затем вы можете установить Apache, выполнив следующую команду:
|
1 |
sudo apt-get install apache2 |
После завершения установки вы можете проверить установленную версию с помощью команды:
|
1 |
apache2 -v |
На момент написания этого руководства версия была:

После этого перейдите по IP-адресу или доменному имени вашего сервера. Вы должны увидеть стандартную индексную страницу Apache:

Иерархия файлов Apache в дистрибутивах Ubuntu и Debian
Оба дистрибутива, Ubuntu и Debian, используют apt package manager. Аналогично, при установке пакета создается схожая иерархия файлов. В нашем случае, как для Ubuntu, так и для Debian, Apache хранит свои конфигурационные файлы в каталоге «/etc/apache2». Перейдите в этот каталог с помощью следующей команды и выведите список его содержимого:
|
1 2 |
cd /etc/apache2 ls -F |
Вы можете увидеть вывод команды на скриншоте ниже:

Вы можете увидеть ряд файлов и подкаталогов, с которыми вам следует ознакомиться при настройке сервера Apache. Вот их описание:
- apache2.conf — это основной конфигурационный файл сервера Apache. Также он содержит все конфигурации по умолчанию. Хотя почти все настройки можно выполнить внутри этого файла, всегда рекомендуется использовать отдельные специализированные файлы для простоты и защиты этого файла по умолчанию от повреждения.
- conf-available — это каталог, содержащий дополнительные локальные конфигурационные файлы и файлы других приложений, которые еще не связаны ни с какими модулями. Конфигурации в этом каталоге неактивны, пока вы их не включите. Команда a2enconf позволяет включить конфигурационный файл. Вот содержимое этого каталога:

- conf-enabled — это каталог, содержащий дополнительные локальные конфигурации и конфигурационные файлы других приложений, связанных с соответствующими модулями. Конфигурационные файлы в этом каталоге активны и влияют на поведение Apache. Вы можете отключить конфигурационный файл с помощью команды a2disconf. Вот содержимое этого каталога:

- envvars — это файл, содержащий переменные окружения Apache2. Переменные в этом файле влияют только на Apache и не связаны с вашей системой Linux. Вот содержимое этого файла:

- magic — это файл, содержащий инструкции для определения MIME-типа файла. Он помогает серверу определить тип файла.
- mods-available — это каталог, содержащий конфигурационные файлы для загрузки модулей и их настройки. Однако они еще не включены. Вы можете включить их с помощью команды a2enmod.
- mods-enabled — это каталог, содержащий конфигурационные файлы для загрузки модулей и их настройки. Конфигурации в этом каталоге уже включены и ссылаются на соответствующие модули. Вы можете отключить модули с помощью команды a2dismod.
- ports-conf — это файл, определяющий порты, доступные для виртуальных хостов, и TCP-порты, которые прослушивает Apache.
- sites-available — это каталог, содержащий доступные конфигурационные файлы для виртуальных хостов Apache. Виртуальные хосты позволяют Apache обслуживать различные веб-сайты. Файлы в этом каталоге еще не активны. Вы можете включить файл виртуального хоста с помощью команды a2ensite.
- sites-enabled — это каталог, содержащий активированные конфигурационные файлы виртуальных хостов. Обычно он содержит символические ссылки на файлы в каталоге sites-available. Вы можете отключить файл виртуального хоста с помощью команды a2dissite.
Модульная структура конфигурационных файлов Apache позволяет изменять и добавлять файлы по мере необходимости.
Содержимое файла apache2.conf
Файл по адресу “/etc/apache2/apache2.conf” содержит основные конфигурационные файлы для Apache. Более конкретно, он содержит конфигурационные директивы, которые дают серверу инструкции. Он состоит из трех разделов, определяющих глобальные настройки сервера (процессов), конфигурацию сервера по умолчанию и конфигурации виртуальных хостов .
В системах Ubuntu и Debian большая часть файла содержит конфигурации процессов глобального сервера. Ближе к концу вы можете найти конфигурации для сервера по умолчанию и виртуальных хостов с помощью директивы «Include». Apache использует директиву «Include» для чтения других конфигурационных файлов и последующего их включения в текущий конфигурационный файл с того места, где появляется директива. Это происходит при запуске сервера Apache.
Прокрутив файл apache2.conf до конца, вы увидите несколько директив include. Эти директивы загружают определения модулей в каталоге mods-enabled directory, the ports.conf file, the local configurations in the conf-enabled directory, and the virtual hosts’ configurations in the sites-enabled directory.
Раздел глобальной конфигурации сервера
Раздел глобальной конфигурации сервера содержит настройки и инструкции, которые управляют работой Apache на глобальном уровне. В нем представлены некоторые директивы, значения которых вы можете изменить, чтобы скорректировать поведение Apache. Давайте обсудим некоторые из них:
- Timeout — эта директива указывает максимальное время, в течение которого сервер должен выполнить запрос. По умолчанию оно составляет 300 секунд, что, скорее всего, слишком много, если вы разрабатываете быстро реагирующее приложение. Вы можете изменить это значение на меньшее, если у вашего сервера достаточно ресурсов.
- KeepAlive — указывает, что каждое соединение должно оставаться открытым для обработки нескольких запросов от одного и того же клиента. По умолчанию установлено значение «On». Однако, если установлено значение «Off», то для каждого запроса придется устанавливать новое соединение, даже если он исходит от того же клиента. Это может привести к значительной перегрузке сервера.
- MaxKeepAliveRequests — управляет максимальным количеством запросов, разрешенных в течение одного постоянного соединения до его закрытия. Чтобы разрешить неограниченное количество соединений, установите значение 0. Для максимальной производительности и эффективности установите максимально возможное число.
- KeepAliveTimeout – определяет максимальное количество секунд ожидания следующего запроса от того же клиента после последнего перед закрытием соединения. По умолчанию это 5 секунд. Если время истекает, то при следующем запросе создается новое соединение для его обработки.
- HostnameLookups — определяет, должен ли быть включен поиск DNS или нет. По умолчанию он отключен. Если вы включите его, то каждый запрос приведет как минимум к одному запросу к серверу имен, что крайне негативно скажется на производительности вашего сервера.
Файл виртуального хоста по умолчанию
Свежая установка сервера Apache поставляется с файлом виртуального хоста по умолчанию, который называется 000-default.conf. Это файл, который обслуживает стандартную страницу index.html в Apache. Он находится в каталоге sites-available. Содержимое этого файла даст вам общее представление о формате файлов виртуальных хостов Apache. Введите следующую команду, чтобы открыть файл:
|
1 |
sudo nano /etc/apache2/sites-available/000-default.conf |
Вот содержимое этого файла. Для краткости мы удалили комментарии:
|
1 2 3 4 5 6 7 8 9 |
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
Как вы можете видеть в заголовке конфигурации VirtualHost *:80, по умолчанию этот виртуальный хост настроен на обработку запросов на порту 80. Это стандартный порт HTTP.
Apache разработан таким образом, чтобы использовать наиболее точное определение виртуального хоста, соответствующее конкретному запросу. Это означает, что данный конкретный виртуальный хост не обязательно будет обрабатывать каждый запрос к серверу. Скорее, если бы существовал другой файл виртуального хоста с более точным определением, он бы переопределил этот файл.
Вот описания директив в файле виртуального хоста:
- ServerAdmin — указывает контактный адрес электронной почты для использования при возникновении проблем с сервером. Apache обычно отображает его на создаваемой им странице ошибки. Если вы установите ServerSignature в значение «Email» в файле /etc/apache2/conf-enabled/security.conf, указанный здесь адрес электронной почты будет отображаться со ссылкой mailto
- DocumentRoot — эта директива указывает на каталог, содержащий файлы веб-сайта. Вы можете найти стандартную приветственную страницу Apache в каталоге /var/www/html в Ubuntu 20.04.
- ErrorLog — эта директива определяет расположение файла журнала ошибок.
- CustomLog — эта директива показывает расположение журнала доступа и формат отображения журнала.
Дополнительные директивы виртуального хоста
- ServerName — указывает доменное имя или IP-адрес, которые должен обрабатывать виртуальный хост. Если бы мы определяли несколько виртуальных хостов, чтобы наш сервер Apache мог обслуживать несколько веб-сайтов, мы бы добавили директиву ServerName и указали домен, который должен обслуживать каждый виртуальный хост.
- ServerAlias — эта директива позволяет применять один файл виртуального хоста к нескольким именам, предоставляя альтернативные домены для доступа к одному и тому же контенту. Например, когда ваши пользователи получают доступ к тому же контенту, если они добавляют перед вашим доменным именем www. Например, мы могли бы добавить следующее в виртуальный хост для домена example.com:
|
1 2 |
ServerName example.com ServerAlias www.example.com |
Директива определения каталога
В реальных условиях файлы вашего веб-сайта, скорее всего, будут находиться в нескольких каталогах. В файле виртуального хоста по умолчанию нет директивы Directory , так как он может обслуживать только один файл index.html. Директива Directory определяет, как Apache обрабатывает различные каталоги внутри корневого каталога документов веб-сайта. Именно в этой директиве вы также определяете ограничения доступа к файловой системе. По умолчанию Apache разрешает доступ из Интернета только к файлам в каталоге /var/www. В этом каталоге вы можете создавать другие каталоги, в которых будут храниться файлы вашего веб-сайта. Кроме того, вы можете указать, как должен осуществляться доступ к файлам в каталоге. Пример определения может выглядеть следующим образом:
|
1 2 3 4 5 |
<Directory /var/www/html> Options Indexes FollowSymLinks MultiViews Require all granted AllowOverride all </Directory> |
Директива <Directory /var/www/html> указывает каталог, к которому будут применяться эти правила. Параметр «AllowOverride” определяет, должен ли файл “.htaccess” переопределять настройки, если вы поместите его в указанный каталог. Это необходимо при работе с такими фреймворками, как Laravel, которые работают с .htaccess и перезаписью URL.
Чтобы узнать больше о виртуальных хостах, вы можете посетить наше руководство по настройке виртуальных хостов Apache на Ubuntu 20.04. Вот пример файла виртуального хоста со всеми определенными нами директивами:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin webmaster@localhost.com DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/html> Options Indexes FollowSymLinks MultiViews Require all granted AllowOverride all </Directory> </VirtualHost> |
Директивы Redirect, Alias и ScriptAlias
В некоторых случаях вам может потребоваться доступ к файлам или исполняемым файлам веб-сайта, которые находятся не непосредственно в каталоге DocumentRoot. Именно здесь на помощь приходят эти три директивы.
Директива Redirect предписывает клиентам сделать новый запрос с другим URL-адресом. Обычно вы будете использовать ее, когда захотите направить посетителей вашего сайта на другое доменное имя или IP-адрес. Обратите внимание, что Redirect выполняется первой перед Alias и ScriptAlias. Директива Alias сопоставляет URL-адрес с путем к каталогу. Директива ScriptAlias сопоставляет URL-адрес с каталогами, которые будут содержать исполняемые скрипты. Чтобы Alias и ScriptAlias работали, вы должны установить права доступа к каталогу для пользователя www-data, которого использует веб-сервер.
Как включить сайты и модули в Apache
Виртуальные хосты и модули должны быть включены, прежде чем они станут активными и доступными для процесса Apache. Кроме того, виртуальные хосты создаются внутри каталога sites-available, как уже объяснялось. Если у вас есть файл виртуального хоста с именем example.com.conf, вы можете включить его с помощью следующей команды:
|
1 |
sudo a2ensite example.com.conf |
Эта команда включает виртуальный хост. Однако, чтобы изменения вступили в силу, вы должны дать команду Apache перезагрузить файлы конфигурации, введя следующую команду:
|
1 |
sudo service apache2 reload |
Возможно, вы захотите отключить файл виртуального хоста с именем example.com.conf, чтобы Apache не использовал его для обслуживания запросов. Для этого введите следующую команду, чтобы отключить файл:
|
1 |
sudo a2dissite example.com.conf |
Опять же, чтобы изменения вступили в силу немедленно, вы должны дать команду Apache перезагрузить файлы конфигурации, введя следующую команду:
|
1 |
sudo service apache2 reload |
Аналогично, вы можете включать и отключать модули, используя тот же синтаксис. Команда для включения модуля — “a2enmod”, а команда для отключения модуля — “a2dismod.” Например, существует модуль Apache под названием mod_rewrite, который помогает переписывать URL-адреса в зависимости от конфигураций .htaccess. Вы должны включить этот модуль, чтобы файл .htaccess работал. Вы можете сделать это, введя команду:
|
1 |
sudo a2enmod rewrite |
Чтобы это изменение вступило в силу, необходимо перезагрузить конфигурацию Apache. Вы также можете отключить модуль, введя команду:
|
1 |
sudo a2dismod rewrite |
После этого перезагрузите конфигурацию Apache2, чтобы изменения вступили в силу немедленно.
Наконец, вот еще несколько ресурсов, которые помогут вам ознакомиться с веб-сервером Apache:
- Установка сервера Apache на Ubuntu 18.04: практическое руководство
- Как установить стек Linux, Apache, MySQL, PHP (LAMP) на CentOS 7
- Защита Apache с помощью Let’s Encrypt на Ubuntu 18.04
- Мир веб-серверов: Apache против Nginx
Заключение
В этом руководстве мы определили базовые конфигурационные файлы Apache в системах Ubuntu и Debian. Как мы продемонстрировали, Apache является высокомодульным, что означает, что вы можете установить множество модулей для выполнения различных задач.
Вы можете легко включать и отключать эти модули, а также изменять другие настройки для достижения различных результатов. Теперь вы можете изменять локальные конфигурационные файлы, которые затем включаются в основной конфигурационный файл. Таким образом, вам не нужно беспокоиться о повреждении глобального конфигурационного файла.
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.