Основная конфигурация apache сервера содержится в каком файле

Обновлено: 03.07.2024

Apache - это популярнейший свободный веб-сервер. Состоянием на 2020 год он используется на 33% всех сайтов интернета, а это приблизительно 304 миллиарда сайтов. Этот веб-сервер был разработан в далеком 1995, как замена для популярного того сервера NCSA и исправил множество его проблем. Ходят слухи что его имя походит от a patchy, заплатка, так как он исправлял ошибки NCSA. Сейчас же, это кроссплатформенная программа, поддерживающая Windows, Linux и MacOS и обеспечивающая достаточную гибкость, настраиваемость и функциональность. Программа имеет модульную структуру, что позволяет расширять ее функциональность почти до бесконечности с помощью модулей.

Установить Apache в Linux можно с помощью нескольких команд, но программа предоставляет очень большое количество настроек, которые можно изменить, а также модулей, после включения которых она будет работать лучше. В этой статье будет рассмотрена установка и настройка Apache, в качестве основной системы мы будем использовать Ubuntu, но вы можете повторить эти действия в любом другом дистрибутиве. Будет рассмотрена не только установка самой программы, но и способы ее настройки, настройка виртуальных хостов apache, а также самые полезные модули.

Установка Apache

На данный момент, самая новая версия программы 2.4 поэтому и будет рассмотрена настройка apache 2.4. Как я уже говорил, в Linux программа устанавливается буквально в пару команд. Для установки в Ubuntu сначала обновим систему до самой новой версии:

sudo apt update
sudo apt upgrade

Затем установка apache2:

sudo apt install apache2

После завершения установки нужно добавить веб-сервер в автозагрузку, чтобы не запускать его вручную после включения компьютера:

sudo systemctl enable apache2

Настройка Apache

Уже прошло то время, когда конфигурация Apache хранилась в одном файле. Но оно и правильно, когда все распределено по своим директориям, в конфигурационных файлах легче ориентироваться.

Все настройки содержатся в папке /etc/apache/:

  • Файл /etc/apache2/apache2.conf отвечает за основные настройки
  • /etc/apache2/conf-available/* - дополнительные настройки веб-сервера
  • /etc/apache2/mods-available/* - настройки модулей
  • /etc/apache2/sites-available/* - настойки виртуальных хостов
  • /etc/apache2/ports.conf - порты, на которых работает apache
  • /etc/apache2/envvars

Как вы заметили есть две папки для conf, mods и site. Это available и enabled. При включении модуля или хоста создается символическая ссылка из папки available (доступно) в папку enable (включено). Поэтому настройки лучше выполнять именно в папках available. Вообще говоря, можно было бы обойтись без этих папок, взять все и по старинке свалить в один файл, и все бы работало, но сейчас так никто не делает.

Сначала давайте рассмотрим главный файл конфигурации:

apache

Timeout - указывает как долго сервер будет пытаться продолжить прерванную передачу или прием данных. 160 секунд будет вполне достаточно.

KeepAlive On - очень полезный параметр, позволяет передавать несколько файлов, за одно соединение, например, не только саму html страницу, но и картинки и css файлы.

MaxKeepAliveRequests 100 - максимальное количество запросов за одно соединение, чем больше, тем лучше.

KeepAliveTimeout 5 - таймаут соединения, обычно для загрузки страницы достаточно 5-10 секунд, так что больше ставить не нужно, но и рвать соединение раньше чем загрузились все данные тоже не нужно.

User, Group - пользователь и группа, от имени которых будет работать программа.

HostnameLookups - записывать в логи вместо ip адресов доменные имена, лучше отключить, чтобы ускорить работу.

LogLevel - уровень логирования ошибок. По умолчанию используется warn, но чтобы логи заполнялись медленнее достаточно включить error

Include - все директивы include отвечают за подключение рассмотренных выше конфигурационных файлов.

apache1

Директивы Directory отвечают за настройку прав доступа к той или иной директории в файловой системе. Синтаксис здесь такой:

<Directory /адрес/в/файловой/системе/>
Параметр значение
</Directory>

Здесь доступны такие основные опции:

AllowOverride - указывает нужно ли читать .htaccess файлы из этой директории, это такие же файлы настроек и таким же синтаксисом. All - разрешать все, None - не читать эти файлы.

DocumentRoot - устанавливает из какой папки нужно брать документы для отображенияа пользователю

Options - указывает какие особенности веб-сервера нужно разрешить в этой папке. Например, All - разрешить все, FollowSymLinks - переходить по символическим ссылкам, Indexes - отображать содержимое каталога если нет файла индекса.

Require - устанавливает, какие пользователи имеют доступ к этому каталогу. Require all denied - всем запретить, Require all granted - всем разрешить. можно использовать вместо all директиву user или group чтобы явно указать пользователя.

Здесь все эти директивы не используются, поскольку нас устраивают значения по умолчанию, но вот в файлах .htaccess они могут быть очень полезны.

У нас остался файл /etc/apache2/ports.conf:

apache2

В нем только одна директива, Listen, которая указывает программе на каком порту нужно работать.

Последний файл /etc/apache2/envvars, его вы вряд ли будете использовать, в нем указанны переменные, которые можно использовать в других конфигурационных файлах.

apache3

Дальше поговорим немного о htacess. Совсем немного.

Настройка сервера Apache через htaccess

Файлы .htaccess позволяют настраивать веб-сервер на Ubuntu для поведения в определенной директории. Все инструкции, указанные в этом файле выполняются как бы они были обвернуты в тег <directory адрес_папки> если бы находились в основном файле.

Важно заметить, что для того, чтобы сервер читал инструкции из .htaccess настройки для этой папки в основном файле или файле виртуального хоста не должны содержать AllowOverride None, чтобы могли работать все настройки нужно AllowOverride All.

А в остальном, здесь может выполняться любая настройка сервера apache, от включения модулей, до обычного изменения доступа к папке. Поскольку все параметры мы уже рассмотрели просто приведем пару примеров:

Order Deny,Allow
Deny from all

Запрещает всем доступ к этой папке, важно применить, для папок с конфигурацией. Чаще всего .htaccess используется для работы с модулем mod_rewrite, который позволяет изменять запросы на лету:

RewriteEngine on
RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L]

Но это очень обширная тема и выходит за рамки этой статьи.

Настройка модулей Apache

Как я уже говорил, Apache - модульная программа, ее функциональность можно расширять с помощью модулей. Все доступные модули загрузчики и конфигурационные файлы модулей находятся в папке /etc/apache/mods-available. А активированные в /etc/apache/mods-enable.

Но вам необязательно анализировать содержимое этих папок. Настройка Apache 2.4 с помощью добавления модулей выполняется с помощью специальных команд. Посмотреть все запущенные модули можно командой:

apache4

Включить модуль можно командой:

sudo a2enmod имя_модуля

sudo a2dismod имя_модуля

После включения или отключения модулей нужно перезагрузить apache:

sudo systemctl restart apache2

Во время выполнения одной из этих команд создается или удаляется символическая ссылка на файл модуля с расширением load в директории mods-available. Можете посмотреть содержимое этого файла, там только одна строка. Например:

apache5

Это к тому, что активировать модуль можно было просто добавив эту строчку в файл apache2.conf. Но принято делать именно так, чтобы избежать путаницы.

Настройки модулей находятся в той же папке, только в файле с расширением .conf вместо load. Например, посмотрим настройки того же модуля для сжатия deflate:

apache6

Файлы в папке conf-available, это такие же модули, только они установлены отдельно от apache, это может быть конфигурационные файлы для включения модуля php или любого другого языка программирования. Здесь работает все точно так же, только команды для включения и отключения этих модулей немного другие:

a2disconf имя модуля

Как вы убедились, включать модули очень просто. Давайте включим несколько необходимых, но не включенных по умолчанию модулей:

sudo a2enmod expires
sudo a2enmod headers
sudo a2enmod rewrite
sudo a2enmod ssl

Модули expires и headers уменьшают нагрузку на сервер. Они возвращают заголовок Not Modified, если документ не изменился с последнего запроса. Модуль expiries позволяет устанавливать время, на которое браузер должен кэшировать полученный документ. Rewrite позволяет изменять запрашиваемые адреса на лету, очень полезно при создании ЧПУ ссылок и т д. А последний для включения поддержки шифрования по SSL. Не забудьте перезагрузить apache2 после завершения настроек.

Настройка виртуальных хостов Apache

Было бы не совсем удобно, если на одной физической машине можно было размещать только один сайт. Apache может поддерживать сотни сайтов на одном компьютере и выдавать для каждого из них правильное содержимое. Для этого используются виртуальные хосты. Сервер определяет к какому домену приходит запрос и отдает нужное содержимое из папки этого домена.

Настройки хостов Apache расположены в папке /etc/apache2/sites-available/. Для создания нового хоста достаточно создать файл с любым именем (лучше кончено с именем хоста) и заполнить его нужными данными. Обернуть все эти параметры нужно в директиву VirtualHost. Кроме рассмотренных параметров здесь будут использоваться такие:

  • ServerName - основное имя домена
  • ServerAlias - дополнительное имя, по которому будет доступен сайт
  • ServerAdmin - электронная почта администратора
  • DocumentRoot - папка с документами для этого домена

apache7

Виртуальные хосты, как и модули нужно активировать. Для этого есть специальные утилиты. Чтобы активировать наберите:

sudo a2ensite test.site

Здесь test.site - имя файла виртуального хоста. Для отключения тоже есть команда:

sudo a2dissite test.site

Настройка виртуальных хостов Apache завершена и на публичном сервере это все бы уже работало, но если вам нужна настройка Apache на домашней машине, то вы ваш новый сайт не откроется в браузере. Браузер не знает такого сайта. И откуда ему знать? DNS службы не могут ничего сообщить об этом доменном имени. Но в системе Linux мы можем сами указать ip адреса для доменных имен в файле /etc/hosts. Поэтому добавляем в конец файла такие строки:

Вот, ну теперь будет работать, открывайте браузер, проверяйте.

Выводы

Вот и все. Установка и настройка Apache linux завершена, вы можете использовать программу для размещения ваших сайтов. Более того, вы не просто настроили ее, вы разобрались со всеми подробностями и теперь знаете чуточку больше. Если у вас остались еще вопросы, пишите в комментариях!

См. также

Клиенты, серверы и URL-адреса

URL-путь может обозначать множество вещей на сервере. Это может быть файл (как getting-started.html ), обработчик (как server-status) или файл какой-то программы (как index.php ). Мы рассмотрим это подробней ниже, в разделе Контент веб-сайта.

Детали транзакции и условия возникновения ошибки записываются в файлы журналов. Это описывается более подробно ниже, в разделе Файлы журналов и устранение неполадок.

Имена хостов и DNS

Для того чтобы соединиться с сервером, клиент сначала должен преобразовать имя сервера в IP-адрес — место в Интернете, где находится сервер. Таким образом, чтобы ваш веб-сервер был доступен, необходимо, чтобы имя сервера было в DNS.

Если вы не знаете как это сделать, вам нужно обратиться к сетевому администратору или поставщику услуг Интернета (провайдеру). Они могут сделать это для вас.

Несколько хостов могут указывать на один и тот же IP-адрес, а один физический сервер может иметь больше одного IP-адреса. Таким образом на одном физическом сервере вы можете запустить больше одного сайта с помощью особенности: виртуальные хосты.

Файл hosts, скорее всего, расположен в /etc/hosts или C:\Windows\system32\drivers\etc\hosts .

Вы можете узнать больше о файле hosts и больше о DNS.

Файлы конфигурации и директивы

Конфигурация часто разбивается на несколько небольших файлов, для удобства управления. Эти файлы загружаются через директиву Include . Имена или расположения этих файлов конфигурации могут сильно отличаться от одной установки к другой. Расположите и разделите эти файлы наиболее подходящим для вас образом. Если расположение файлов по умолчанию, не имеет смысла для вас, не стесняйтесь изменить его.

Сервер настраивается путём размещения директив конфигурации в этих файлах конфигурации. Директива — это ключевое слово с одним или несколькими аргументами, устанавливающими её значение.

На вопрос: «Где я должен прописать эту директиву?» – обычно отвечают, там где ты хочешь использовать её. Если это глобальная настройка, она должна располагаться в конфигурационном файле вне разделов <Directory> , <Location> , <VirtualHost> или других разделов. Если настройка относится только к конкретному каталогу, значит она должна быть внутри секции <Directory> , которая описывает этот каталог, и так далее. Смотри документ Разделы конфигурации с подробным описанием вышеуказанных разделов.

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

Контент веб-сайта

Содержимое сайта может принимать различные формы, но в широком смысле разделяется на статический и динамический контент.

Статический контент — это, например, HTML-файлы, файлы изображений, CSS-файлы и другие файлы, которые просто лежат на диске. Директива DocumentRoot указывает где в вашей файловой системе, вы должны разместить эти файлы. Эта директива устанавливается глобально или отдельно для каждого виртуального хоста. Посмотрите в своём файле(ах) конфигурации, чтобы узнать, как именно эта директива используется на вашем сервере.

Динамический контент — это всё что генерируется во время запроса и может изменяться от запроса к запросу. Существует множество способов создания динамического контента. Различные обработчики доступны для генерации содержимого. Могут быть написаны специальные CGI программы для генерации контента на сайте.

Файлы журналов и устранение неполадок

Больше о логирование вы можете узнать в документации о журналах.

Что дальше?

Теперь, когда вы знакомы с основами, пора двигаться дальше.

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

Comments

Copyright 2021 The Apache Software Foundation.
Licensed under the Apache License, Version 2.0.


Базовая настройка сервера Apache

  1. Установить необходимые пакеты.
  2. Определить основной файл конфигурации.
  3. Создать некоторый контент веб-сервера.

Установка необходимых пакетов

Вместо использования отдельных пакетов вы также можете использовать yum groups. Команда yum groups list предоставляет обзор всех доступных групп yum, а yum group Basic Web Server предоставляет все необходимое для установки веб-сервера Apache и все необходимые зависимости. Чтобы выполнить установку Apache используйте yum groups install "Basic Web Server".

Определение основного файла конфигурации

Создание контента веб-сервера

Чтобы протестировать веб-сервер, вы можете запустить браузер. Браузер Firefox установлен по умолчанию во всех графических установках RHEL / CentOS. Если ваш сервер не поддерживает графический интерфейс, используйте yum install elinks для установки текстового браузера elinks.

Этот браузер не позволяет загружать сложные веб-страницы, но он позволяет вам проверить работу веб-сервера. Ниже на скриншоте показано, как выглядит интерфейс elinks.

В упражнении 1 вы узнаете, как настроить базовый веб-сервер.

Упражнение 1. Настройка базового веб-сервера

В этом упражнении вы узнаете, как настроить базовый веб-сервер Apache.

2. Откройте главный файл конфигурации Apache в редакторе и найдите строку, которая начинается с DocumentRoot. DocumentRoot определяет местоположение, где сервер Apache будет искать контент, который он будет обслуживать. Убедитесь, что он установлен в /var/www/html.

Понимание файлов конфигурации Apache

Листинг 3
Первое, что вы заметите, это наличие трех символических ссылок на журналы, модули и каталог выполнения. Они созданы, чтобы позволить Apache запускаться в среде chroot.

Среда chroot предоставляет поддельный корневой каталог. Это каталог в файловой системе, представленный в качестве корневого каталога для процесса, который выполняется в среде chroot. Это сделано по соображениям безопасности: процессы, работающие в среде chroot, могут обращаться к файлам только в этой среде chroot, что снижает риск возникновения инцидентов безопасности, когда злоумышленникам удается получить оболочку входа в систему с использованием идентификатора веб-сервера и попробовать пройти через файловюя систему для выполнения несанкционированных действий.

Создание виртуальных хостов Apache

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

■ Виртуальный хостинг на основе имен является наиболее распространенным решением. В этом решении виртуальные хосты используют разные имена, но один и тот же IP-адрес.

■ Виртуальные хосты на основе IP менее распространены, но необходимы, если имя веб-сервера должно быть преобразовано в уникальный IP-адрес. Виртуальные хосты на основе IP требуют нескольких IP-адресов на одном сервере и являются общими в конфигурации, где сервер Apache использует TLS для защиты соединений.

Упражнение 2. Установка виртуальных хостов Apache

В этом упражнении вы создадите два виртуальных хоста. Чтобы помочь вам настроить виртуальные хосты, вы сначала настраиваете разрешение имен, после чего вы создаете конфигурацию виртуальных хостов.

Предполагается, что у вас есть два сервера с именем server1 и server2. Если что, вы можете настроить гипервизор и создать две виртуальные машины по этой статье: KVM в CentOS 7.

Добавьте в этот файл:
4. Закройте файл конфигурации и выполните:

6. Временно выключите SELinux командой setenforce 0.

По умолчанию все конфигурационные файлы хранятся в папке " conf ".

В папке " extra " (внутри папки " conf ") находятся дополнительные конфигурационные файлы . При необходимости их можно подключить внутри основного конфигурационного файла.

Синтаксис конфигурационных файлов

На одной строке должна быть расположена только одна директива. Символ \ (обратный слэш) может быть использован в качестве последнего символа строки, чтобы указать, что директива продолжается на следующей строке. После символа \ не должно быть никаких других пробельных символов, кроме символа конца строки.

Директива и её аргументы разделяются пробелом. Сами аргументы также разделяются пробелами. Если аргумент содержит пробелы, его необходимо заключить в кавычки.

Директивы не чувствительны к регистру символов, а вот аргументы наоборот – чувствительны.

Пробельные символы, вставленные до директивы, игнорируются, поэтому их можно использовать для вставки отступов, чтобы было удобнее читать код. Пустые строки так же игнорируются.

Модули

Модуль – это просто подключаемый файл, который позволяет добавить дополнительный функционал. Все подключаемые модули по умолчанию располагаются в папке " modules ".

Модули позволяют использовать директивы, которые не входят в состав ядра веб-сервера Apache.

.htaccess

.htaccess – это файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Он позволяет настраивать функционал для отдельных каталогов, без изменения основного конфигурационного файла, так как доступ к нему чаще всего запрещён.

Файл .htaccess действует только на каталог, в котором располагается, и на его дочерние каталоги. Файл .htaccess может быть размещён в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).

Изменения, вносимые в файл .htaccess, не требуют перезапуска сервера.

Если в файле .htaccess была допущена какая-либо ошибка, например неправильно написана директива или значение директивы, то сервер вернёт ошибку: Error 500 .

Файл .htaccess использует тот же синтаксис, что и конфигурационные файлы Apache.

Посмотреть, какие директивы могут располагаться внутри файла .htaccess можно в справочнике директив в "Контексте" конкретной директивы.

Основной файл конфигурации этого сервера - "httpd.conf". Лежит он в каталоге "conf" в root-директории Apache. Вот над ним вам и придеться издеваться. Скажу сразу, если вы не понимаете английского, удалите из этого файла все комментарии и пояснения, оставьте только сами директивы (и закоментированные тоже); таким образом вы сможете быстрее находить нужную директиву, не роясь среди множества непонятных вам пояснений. Синтаксис файла очень простой: "директива значение", все строки не соответствующие этому виду можно удалить.

Внимане! Некоторые директивы могут выглядеть так:

и т. п. Эти строки удалять не нужно!

Общие настройки

Вам нужно будет сделать правку файла "httpd.conf". У некоторых директив изменить значение, другие раскомментировать, третьи добавить. Далее я приведу список директив и их значений, которые должны присутствовать в файле конфигурации Apache.

Каталог с файлами сервера (не путать с "DocumentRoot"):

Привязывает Apache к конкретному порту:

Имя сервера (на работу это не влияет):

Администратор сервера. Содержит ваш адрес электронной почты, который будет отображаться при некоторых ошибках сервера:

Вам необходимо создать папки, где будут храниться ваши сайты. По умолчанию Apache устанавливает "DocumentRoot" - "%ServerRoot%/htdocs" (т. е. если вы установили Apache в папку "C:\Server\Apache", то "DocumentRoot" будет выглядеть так: "C:/Server/Apache/Apache2/htdocs"). Вы должны изменить значение "DocumentRoot" на "C:/Sites/home/localhost/www".

Строго следуйте моим инструкциям, чтобы быть уверенными, что все это у вас потом заработает. Создайте на диске "C:" папку "Sites". В ней создайте каталог "home", уже в нем - "localhost", "neebet", "mysite". В каждую из этих папок ("localhost", "neebet", "mysite") положите каталоги "www" (для хранения html документов), "cgi" (для хранения cgi-скриптов), пустые файлы access.log (журнал доступа к серверу) и error.log (журнал ошибок сервера). Т. о. структура каталогов, в которых будут храниться ваши сайты должна выглядеть так:

Зачем это нужно, поймете потом, а сейчас просто сделайте как я говорю.

Далее замените блок "<Directory "C:/Server/Apache/Apache2/htdocs">" на следующее:

Этими директивами вы разрешите просмотр содержимого каталога в браузере при отсутствии индексных файлов, включите поддержку SSI, разрешите использовать файлы .htaccess для настройки каталогов и разрешите доступ для всех к сайту.

Задание индексного файла для директории (этот файл сервер будет отображать при обращении к каталогу без указания имени файла):

Настройки CGI

Задание псевдонима для каталога с cgi-скриптами "C:\Sites\home\localhost\cgi". При указании пути вида http://localhost/cgi/ или http://localhost/cgi-bin/, Apache будет обращаться к каталогу "C:\Sites\home\localhost\cgi":

Указывает Apache, что файлы с расширением "cgi", "bat", "exe" нужно воспринимать как cgi-скрипты:

Блок "<Directory "C:/Server/Apache/Apache2/cgi-bin">" замените на:

Языковые настройки

Остальные строки вида "AddLanguage lang .lang" можете закомментировать (если конечно вам не нужна поддержка этих языков):

Устанавливает языковой приоритет:

Настройки PHP

Настройки SSI

Теперь основные дерективы заданы. Для вступления изменений в силу - перезапустите Apache.

Виртуальные хосты

Итак, вы создали каталог "localhost" для хранения и тестирования документов вашего сайта. Но если у вас не один сайт? Можно конечно создать каталоги для других сайтов внутри "localhost" и обращаться к ним "http://localhost/site", но это не совсем удобно. Тем более, что Apache дает возможность решить эту проблему с помощью виртуальных хостов. Есть два вида виртуальных хостов: отдельные для каждого IP адреса и использующие один IP (name-based хосты). Я объясню как настроить последние.

Вы уже создали ранее папки "neebet" и "mysite" в директории "home". Это и есть корни ваших виртуальных хостов. В них должны быть папки "www" и "cgi", файлы access.log и error.log. Т. е. все так же как и с каталогом "localhost". Все ваши виртуальные хосты будут использовать IP "127.0.0.1".

Добавьте в файл "httpd.conf" следующее:

Можно добавить в блоки "<VirtualHost>" и другие параметры, однако лучше управлять виртуальными хостами с помощью .htaccess. Также стоит отметить, что все параметры, не указанные в блоках "<VirtualHost>" или в .htaccess, наследуются от главного хоста (т. е. от "localhost").

Т. о. вы настроили Apache для работы с виртуальными хостами. Имена, естесственно, можно изменить, но при этом будте внимательны с путями!

Читайте также: