Настройка 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-подобных системах будет /usr. Конфигурацию по умолчанию обычно можно найти в файле с именем httpd.
Файл конфигурации содержит простые директивы, по одной на строку. Если настройки не помещаются на одной строчке, можно использовать символ \, как это применяется при работе со скриптами в терминале. Если в значении аргумента есть пробелы, он помещается в кавычки. Регистр букв при указании директив важен. Для аргументов регистр, как правило, тоже имеет значение. Для однострочных комментариев используется символ #. Аргументы, в которых записываются нужные значения параметров настройки, отделяются пробелами.
Сложные директивы указываются внутри угловых скобок, по аналогии с тегами в HTML. Внутри тега с помощью простых или сложных директив задаётся поведение веб-сервера.
В отличие от веб-сервера Nginx, конфигурация может храниться и локально в директориях сайта, к которому предоставляет доступ Apache. Для этого создаётся специальный файл .htaccess в папке, которая должна работать иначе, чем указано в текущей конфигурации Apache. Если пользователь не имеет доступа к файлам конфигурации Apache напрямую, такой вариант конфигурации будет очень полезен.
Обычно конфигурация хранится не в одном большом файле, а разбивается на несколько небольших файлов. Они подключаются в единый конфигурационный файл, который используется для настройки веб-сервера, так:
Include /path/to/conf/example.conf
Include /path/to/conf/example.conf
Include — директива, одна из многих, которые позволяют настраивать веб-сервер. Все директивы описаны в официальной документации, мы рассмотрим наиболее важные.
В файлах конфигурации можно задавать переменные с помощью директивы Define. Использовать переменные можно с помощью конструкции ${. Как и в терминале, в файлах конфигурации Apache можно создавать переменные окружения. Для этого используется директива Set.
Для указания директории, к которой веб-сервер должен перенаправить HTTP-запросы от клиента, используется следующий список директив:
<— устанавливаются правила поведения веб-сервера для файлов и поддиректорий внутри путиDirectory directory - path> directory.- path <— то же самое, что иDirectory Match regex> Directory, но применяется ко всем путям, которые удовлетворяют регулярному выражениюregex.<— устанавливаются правила поведения веб-сервера для файлов с именемFiles filename> filename.<— то же самое, что иFiles Match regex> Files, но применяется ко всем файлам, имена которых удовлетворяют регулярному выражениюregex.<— устанавливаются правила поведения веб-сервера для определённых абсолютных и относительных ссылокLocation U R L - path| U R L> URL.- path|URL <— то же самое, что иLocation Match regex> Location, но применяется ко всем ссылкам, которые удовлетворяют регулярному выражениюregex.<— устанавливаются правила поведения веб-сервера для определённых имён хостов или IP-адресов.Virtual Host addr [ : port ] [ addr [ : port ] ] . . . >
Примеры сложных директив
Скопировано<Directory "/usr/local/httpd/htdocs"> AllowOverride None </Directory>
Для директории /usr директива Allow с аргументом None будет означать, что локальную конфигурацию в файле .htaccess нужно проигнорировать.
<Location "/status"> SetHandler server-status Require all granted </Location>
Директива Set позволяет обрабатывать запросы, используя специальные обработчики (хендлеры). В примере при обращении к пути сайта /status веб-сервер выдаёт отчёт о своём состоянии. Аргументы 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 имеют доступ к папке /www, а пользователи из группы 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-адресов или имён хостов, для обработки запросов пользователей. Можно указать для виртуального хоста доменное имя сайта (Server); директорию, в которую будут перенаправляться запросы пользователей (Document); можно настроить отчёты об ошибках (Error) или успешных актах передачи файлов пользователям (Transfer):
<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>
В примере происходит следующее:
Addдобавляет обработчикHandler php7для файлов с расширением. fcgi .php;Actionактивирует тип обработкиphp7запросов для обработчика. fcgi /php7;. fcgi Aliasустанавливает соответствие между ссылками и локальными директориями на компьютере, где запущен сервер;Authorizationопределяет период времени, по истечении которого понадобится новая авторизация клиента.
Управление конфигурацией
СкопированоЗапустить Apache можно напрямую, используя исполняемый файл, или в качестве службы в операционной системе.
Проверить конфигурацию на соответствие синтаксису можно с помощью ключа -t:
httpd -t
httpd -t
Ключ -s выводит в консоль информацию о текущей конфигурации веб-сервера для виртуального хоста:
httpd -s
httpd -s
Ключ -k позволяет управлять веб-сервером с помощью сигналов Unix-подобных систем (подробнее в статье «Многозадачность и управление процессами)».
httpd -k <signal>
httpd -k <signal>
Можно использовать сигналы из списка:
start — запустить;
stop — немедленно остановить;
graceful — остановить веб-сервер после завершения обработки текущих запросов клиентов;
restart — перезапустить с новой конфигурацией, без завершения обработки текущих запросов клиентов;
graceful — перезапустить с новой конфигурацией, дождавшись завершения обработки текущих запросов клиентов;
reopen — открыть лог-файлы заново.
Можно получить конфигурационный файл с помощью сервиса Mozilla SSL Configuration Generator. Попробуйте сгенерировать разные конфигурации, это поможет разобраться с конкретными настройками детальнее.
Шпаргалка по Apache
СкопированоПодключение файлов конфигурации
Скопировано
Include /etc/apache/virtual-hosts/*.conf
Include /etc/apache/virtual-hosts/*.conf
Для удобного управления конфигурацией и для возможности переиспользовать конфигурацию между веб-серверами есть возможность подключать конфигурационные файлы. Apache понимает собранную из таких кирпичиков конфигурацию так, как если бы она лежала в одном файле.
Своё сообщение о 404 ошибке
Скопировано
ErrorDocument 404 /404.html
ErrorDocument 404 /404.html
У Apache, как и у любого веб-сервера, есть стандартное сообщение об ошибке. Но не всегда хочется использовать стандартное. Кастомизация сообщения возможна простым перенаправлением запроса к несуществующей странице на нужный разработчику файл. В примере этот файл называется 404.html и находится в директории сайта.
Создание виртуального каталога (mod_alias)
Скопировано
Alias /common /web/common
Alias /common /web/common
Эта настройка позволяет перенаправить запросы клиента к определённому каталогу сайта к директории на компьютере, на котором работает веб-сервер. В примере настройка работает так: клиент обращается к сайту по адресу https и получает содержимое директории /web.
Создание постоянного редиректа (mod_alias)
Скопировано
Redirect permanent /old http://example.com/new
Redirect permanent /old http://example.com/new
Часто необходимо перенаправить клиентов при обращении к каталогу сайта на другой сайт. Например, выходит новая версия сайта или сайт переезжает на новый домен. Поисковые системы тоже понимают такой вид редиректа, как переезд контента на другой адрес в сети, и привязывают всю накопленную информацию к новому месту в Интернете.
Разрешение доступа только с определённого 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
Больше настроек можно посмотреть в официальной документации.