Настройка Apache
Секция статьи "Настройка Apache"Веб-сервер Apache был разработан в 1995 году Apache Software Foundation как замена NCSA HTTPd. В Unix-подобных операционных системах, как правило, Apache поставляется вместе с дистрибутивом как служба httpd
. На Windows Apache необходимо установить и запустить в качестве службы (инструкция).
Существует несколько заранее подготовленных программных пакетов в виде приложений с графическим интерфейсом пользователя, в которых уже установлены и настроены для совместной работы веб-сервер Apache, база данных и интерпретатор для скриптового языка. Наиболее популярными являются пакеты AMP (аббревиатура от Apache + MySQL/MariaDB + Perl/PHP/Python). Благодаря простоте установки и настройки, поддержке разных операционных систем наиболее популярным пакетом является XAMPP.
Структура файлов конфигурации
Секция статьи "Структура файлов конфигурации"Работу Apache можно настраивать с помощью файлов конфигурации. Файлы конфигурации могут быть расположены в разных местах в зависимости от типа установки веб-сервера. Есть страница из официальной документации, которая описывает стандартные пути установки из дистрибутива для разных операционных систем. Если вы установили Apache, собрав из исходного кода, таким путём на Unix-подобных системах будет
. Конфигурацию по умолчанию обычно можно найти в файле с именем httpd
.
Файл конфигурации содержит простые директивы, по одной на строку. Если настройки не помещаются на одной строчке, можно использовать символ
, как это применяется при работе со скриптами в терминале. Если в значении аргумента есть пробелы, он помещается в кавычки. Регистр букв при указании директив важен. Для аргументов регистр, как правило, тоже имеет значение. Для однострочных комментариев используется символ
. Аргументы, в которых записываются нужные значения параметров настройки, отделяются пробелами.
Сложные директивы указываются внутри угловых скобок, по аналогии с тегами в HTML. Внутри тега с помощью простых или сложных директив задаётся поведение веб-сервера.
В отличие от веб-сервера Nginx, конфигурация может храниться и локально в директориях сайта, к которому предоставляет доступ Apache. Для этого создаётся специальный файл
в папке, которая должна работать иначе, чем указано в текущей конфигурации Apache. Если пользователь не имеет доступа к файлам конфигурации Apache напрямую, такой вариант конфигурации будет очень полезен.
Обычно конфигурация хранится не в одном большом файле, а разбивается на несколько небольших файлов. Они подключаются в единый конфигурационный файл, который используется для настройки веб-сервера, так:
Include /path/to/conf/example.conf
Include /path/to/conf/example.conf
Include
— директива, одна из многих, которые позволяют настраивать веб-сервер. Все директивы описаны в официальной документации, мы рассмотрим наиболее важные.
В файлах конфигурации можно задавать переменные с помощью директивы Define
. Использовать переменные можно с помощью конструкции ${VAR}
. Как и в терминале, в файлах конфигурации Apache можно создавать переменные окружения. Для этого используется директива SetEnv
.
Для указания директории, к которой веб-сервер должен перенаправить HTTP-запросы от клиента, используется следующий список директив:
<Directory directory
— устанавливаются правила поведения веб-сервера для файлов и поддиректорий внутри пути- path> directory
.- path <DirectoryMatch regex>
— то же самое, что иDirectory
, но применяется ко всем путям, которые удовлетворяют регулярному выражениюregex
.<Files filename>
— устанавливаются правила поведения веб-сервера для файлов с именемfilename
.<FilesMatch regex>
— то же самое, что иFiles
, но применяется ко всем файлам, имена которых удовлетворяют регулярному выражениюregex
.<Location URL
— устанавливаются правила поведения веб-сервера для определённых абсолютных и относительных ссылок- path|URL> URL
.- path|URL <LocationMatch regex>
— то же самое, что иLocation
, но применяется ко всем ссылкам, которые удовлетворяют регулярному выражениюregex
.<VirtualHost addr
— устанавливаются правила поведения веб-сервера для определённых имён хостов или IP-адресов.[ : port ] [ addr [ : port ] ] . . . >
Примеры сложных директив
Секция статьи "Примеры сложных директив"<Directory "/usr/local/httpd/htdocs"> AllowOverride None </Directory>
Для директории
директива AllowOverride
с аргументом None
будет означать, что локальную конфигурацию в файле
нужно проигнорировать.
<Location "/status"> SetHandler server-status Require all granted </Location>
Директива SetHandler
позволяет обрабатывать запросы, используя специальные обработчики (хендлеры). В примере при обращении к пути сайта
веб-сервер выдаёт отчёт о своём состоянии. Аргументы all granted
для директивы Require
указывают, что веб-сервер должен обработать любые запросы для всех пользователей, независимо от того, авторизованы они или нет. Можно разрешить доступ только определённым IP-адресам, которые начинаются с 10
, 172
или 192
так:
Require ip 10 172.20 192.168.2
Require ip 10 172.20 192.168.2
Директива Require
используется для установления каких-то требований. Если требования не соблюдены, то запросы от клиента отклоняются веб-сервером. Можно использовать вложенные директивы так:
<Directory "/www/docs"> <RequireAll> Require group alpha beta Require not group reject </RequireAll> </Directory>
В этом примере все пользователи из групп alpha
и beta
имеют доступ к папке
, а пользователи из группы reject
— нет.
Можно и сложнее. Пример так называемого контейнера авторизации:
<Directory "/www/mydocs"> <RequireAll> <RequireAny> Require user superadmin <RequireAll> Require group admins <RequireAny> Require group sales </RequireAny> </RequireAll> </RequireAny> <RequireNone> Require group temps </RequireNone> </RequireAll> </Directory>
Широко распространено использование виртуальных хостов, то есть отдельных IP-адресов или имён хостов, для обработки запросов пользователей. Можно указать для виртуального хоста доменное имя сайта (ServerName
); директорию, в которую будут перенаправляться запросы пользователей (DocumentRoot
); можно настроить отчёты об ошибках (ErrorLog
) или успешных актах передачи файлов пользователям (TransferLog
):
<VirtualHost 10.1.2.3:80> DocumentRoot "/www/docs/host.example.com" ServerName host.example.com ErrorLog "logs/host.example.com-error_log" TransferLog "logs/host.example.com-access_log" </VirtualHost>
Веб-сервер Apache позволяет использовать модули для обработки HTTP-запросов клиентов. Например, для обработки HTTP-запросов интерпретатором PHP для файлов с расширением *
нужно подключить и настроить отдельный модуль mod
:
<FilesMatch "\.php$"> SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/" </FilesMatch>
Предварительно модуль необходимо подключить и проверить, подключился ли он корректно. Для этого нужно использовать директиву:
<IfModule mod_fastcgi.c> AddHandler php7.fcgi .php Action php7.fcgi /php7.fcgi Alias /php7.fcgi /usr/lib/cgi-bin/php7.fcgi Authorization -idle-timeout 3600 <Directory /usr/lib/cgi-bin> Require all granted </Directory> </IfModule>
В примере происходит следующее:
AddHandler
добавляет обработчикphp7
для файлов с расширением. fcgi
;. php Action
активирует тип обработкиphp7
запросов для обработчика. fcgi
;/ php7 . fcgi Alias
устанавливает соответствие между ссылками и локальными директориями на компьютере, где запущен сервер;Authorization
определяет период времени, по истечении которого понадобится новая авторизация клиента.
Управление конфигурацией
Секция статьи "Управление конфигурацией"Запустить Apache можно напрямую, используя исполняемый файл, или в качестве службы в операционной системе.
Проверить конфигурацию на соответствие синтаксису можно с помощью ключа
:
httpd -t
httpd -t
Ключ
выводит в консоль информацию о текущей конфигурации веб-сервера для виртуального хоста:
httpd -s
httpd -s
Ключ
позволяет управлять веб-сервером с помощью сигналов Unix-подобных систем (подробнее в статье «Многозадачность и управление процессами)».
httpd -k <signal>
httpd -k <signal>
Можно использовать сигналы из списка:
start
— запустить;
stop
— немедленно остановить;
graceful
— остановить веб-сервер после завершения обработки текущих запросов клиентов;
restart
— перезапустить с новой конфигурацией, без завершения обработки текущих запросов клиентов;
graceful
— перезапустить с новой конфигурацией, дождавшись завершения обработки текущих запросов клиентов;
reopen
— открыть лог-файлы заново.
Можно получить конфигурационный файл с помощью сервиса Mozilla SSL Configuration Generator. Попробуйте сгенерировать разные конфигурации, это поможет разобраться с конкретными настройками детальнее.
Шпаргалка по Apache
Секция статьи "Шпаргалка по Apache"Подключение файлов конфигурации
Секция статьи "Подключение файлов конфигурации"Include /etc/apache/virtual-hosts/*.conf
Include /etc/apache/virtual-hosts/*.conf
Для удобного управления конфигурацией и для возможности переиспользовать конфигурацию между веб-серверами есть возможность подключать конфигурационные файлы. Apache понимает собранную из таких кирпичиков конфигурацию так, как если бы она лежала в одном файле.
Своё сообщение о 404 ошибке
Секция статьи "Своё сообщение о 404 ошибке"ErrorDocument 404 /404.html
ErrorDocument 404 /404.html
У Apache, как и у любого веб-сервера, есть стандартное сообщение об ошибке. Но не всегда хочется использовать стандартное. Кастомизация сообщения возможна простым перенаправлением запроса к несуществующей странице на нужный разработчику файл. В примере этот файл называется 404.html и находится в директории сайта.
Создание виртуального каталога (mod_alias)
Секция статьи "Создание виртуального каталога (mod_alias)"Alias /common /web/common
Alias /common /web/common
Эта настройка позволяет перенаправить запросы клиента к определённому каталогу сайта к директории на компьютере, на котором работает веб-сервер. В примере настройка работает так: клиент обращается к сайту по адресу https
и получает содержимое директории
.
Создание постоянного редиректа (mod_alias)
Секция статьи "Создание постоянного редиректа (mod_alias)"Redirect permanent /old http://example.com/new
Redirect permanent /old http://example.com/new
Часто необходимо перенаправить клиентов при обращении к каталогу сайта на другой сайт. Например, выходит новая версия сайта или сайт переезжает на новый домен. Поисковые системы тоже понимают такой вид редиректа, как переезд контента на другой адрес в сети, и привязывают всю накопленную информацию к новому месту в Интернете.
Разрешение доступа только с определённого IP-адреса
Секция статьи "Разрешение доступа только с определённого IP-адреса"Order Deny,AllowDeny from allAllow from 127.0.0.1
Order Deny,Allow Deny from all Allow from 127.0.0.1
Эта возможность чаще всего имеет смысл для отладки сайта. Клиентам доступа к сайту не будет кроме компьютеров разработчиков. С другой стороны, настройка может использоваться и для обеспечения дополнительного уровня защиты. Можно заходить на сайт только через VPN, IP-адрес которого прописан в настройках.
Включение механизма редиректов
Секция статьи "Включение механизма редиректов"RewriteEngine OnRedirect /news/123 to /news.cfm?id=123RewriteRule ^/news/([0-9]+)$ /news.cfm?id=$1 [PT,L]Redirect www.example.com to example.comRewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]RewriteRule ^(.*)$ http://example.com$1 [R=301,L]
RewriteEngine On Redirect /news/123 to /news.cfm?id=123 RewriteRule ^/news/([0-9]+)$ /news.cfm?id=$1 [PT,L] Redirect www.example.com to example.com RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] RewriteRule ^(.*)$ http://example.com$1 [R=301,L]
Для работы бэкенда или фронтенда, когда веб-приложение использует пути и аргументы адресной строки, эта настройка очень важна. От правильности настройки редиректов напрямую зависит корректность работы веб-приложения.
На практике
Секция статьи "На практике"Управление и мониторинг
Секция статьи "Управление и мониторинг"С помощью сигналов в Unix-подобных операционных системах веб-сервером можно управлять, как это описано в статье «Веб-сервер Nginx». Управление веб-сервером Apache осуществляется так:
sudo systemctl status httpd
— получить информацию о запущенном сервере;sudo systemctl stop httpd
— остановить сервер;sudo systemctl start httpd
— запустить сервер;sudo systemctl reload httpd
— перезапустить сервер, дождавшись завершения обработки всех текущих запросов;sudo systemctl restart httpd
— перезапустить сервер, не дожидаясь окончания обработки текущих запросов.
В Windows управление веб-сервером зависит от того, как он был запущен. Apache может использоваться как консольное приложение. В этом случае запуск, установка и перезапуск Apache можно осуществить с помощью команд:
httpd.exehttpd.exe -k shutdownhttpd.exe -k restart
httpd.exe httpd.exe -k shutdown httpd.exe -k restart
Больше настроек можно посмотреть в официальной документации.