Вступление.
Apache — это самый распространённый веб-сервер с открытым исходным кодом. На 2022 год за счет этого серверного ПО функционируют на 35% сайтов интернета, а это около 350 миллиардов интернет проектов. Этот веб-сервер был создан Робертом Маккулом в 1995 году, 1999 года поддержкой проекта занимается команда разработчиков Apache Software Foundation, это альтернатива для ранее известного того веб-сервера NCSA и было исправлено множество багов. В интернете пишут имя этого web-сервера произвольное от patchy, то есть это заплатка, исправление ошибок в исходном коде NCSA. Apache кроссплатформенное решение, поддерживается следующими операционными системами Windows, Linux, Unix и MacOS.
Web-сервер имеет модульную структуру, что позволяет гибко расширять функциональность программного обеспечения зависимо от поставленных задач.
Установка Apache в Линукс производится при помощи командной строки, для осуществления корректной настройки программного обеспечения требует углубленного изучения документации, конфигурирование сервера предоставляет достаточно большое количество настроек, естественно при профессиональной настройке, программное обеспечение будет работать намного лучше.
В рамках данной статьи будет произведена установка и базовая настройка Apache, в качестве основного сервера, настройку будем производить в дистрибутиве Ubuntu 20.04 и Debian 11, вы сможете повторить эти действия в Debian подобных дистрибутивах Линукс.
Инструкция будет актуальна для версий операционных систем Linux Debian 8 (jessie), Debian 9 (stretch), Debian 10 (bullseye) и Debian 11 (bullseye), также инструкция тестировалась в дистрибутивах GNU/Linux Ubuntu 14.04 LTS (Trusty Tahr), 16.04 LTS (Xenial Xerus), 18.04 LTS (Bionic Beaver), 20.04 LTS (Focal Fossa), 22.04 LTS (Jammy Jellyfish). Настоятельно рекомендую производить установку программного обеспечения на стабильные дистрибутивы, период поддержки которых не завершен сообществом дистрибутива.
Мы произведем конфигурирование Apache и виртуальных хостов и включим самые актуальные модули, которые необходимы для работы большинства сайтов.
Обучающие видео как установить и настроить Apache2 в Ubuntu и Debian.
Внимание! РКН: www.youtube.com нарушает законодательство РФ
Рекомендую в начале просмотреть обучающие видео и после приступить к процессу установки и конфигурации.
Установка Apache.
Произведем установку самой актуальную версию серверного программного обеспечения, на момент публикации данной статьи это Apache 2.4. Как я ранее писал, в Линукс установка сервера производится в командной строке, это можно сделать буквально за пару команд. Производим выполнение команд от администратора системы или root. Если работаете от пользователя root тогда нужно исключить из команды sudo.
Установка и корректная настройка Apache в Windows это тема другой статьи, ссылка на материал будет добавлена позднее.
Для начала произведем обновление пакетов системы до актуальной версии:
sudo apt update
sudo apt upgrade
Подтверждаем обновление пакетов и нажимаем Y и затем Enter.
Затем произведем установку apache2:
Подтверждаем установку Apache и нажимаем Y и затем Enter.
В дистрибутивах название RPM пакета может быть другим, например команда для установки dnf install httpd и при прочтении документации к вашему дистрибутиву Linux, установка 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 и sites. Каталоги в названии которых имеется available и enabled, это работает таким образом, что при активации модуля или включении хоста создается символическая ссылка в каталоге available (значение доступно) которая ведет в каталог enable (значение включено). В связи с этим конфигурирование правильно будет производить именно в каталогах available. Конечно, можно было бы обходиться без этих каталогов, взять по старинке и прописать в одном файле, конечно, это все бы работало, но в наше время так не принято делать.
Важно! Рекомендую всем системным администраторам Linux обязательно читать информацию из официального источника и сделать своей привычкой! Со временем информация может устаревать.
Параметры сервера Apache
Вначале предлагаю рассмотреть главный конфигурационный файл Apache:
Внимание! Мы будем использовать консольный редактор nano. Если вы получаете следующую ошибку: -bash: nano: команда не найдена, установите nano командой:
После установки консольного редактора nano, открываем файл.
Timeout – означает сколько выделено времени серверу на выполнение передачи или прием данных. Установленного значения 160 секунд вполне достаточно для стабильной работы.
KeepAlive On – очень важный параметр, его включение позволяет передавать веб серверу несколько потоков за одну сессию, к примеру, не только html данные, но и image, css, js, txt и другие файлы.
MaxKeepAliveRequests 100 – этот параметр задает максимальное число запросов за одно соединение, большое значение дает нагрузку на процессор, установленного значения 100 запросов достаточно для нормальной работы.
KeepAliveTimeout 5 – таймаут соединения, в основном достаточно 5-10 секунд для загрузки страниц, большое значение ставить не нужно, но и обрывать соединение раньше времени чем загрузилась страница тоже не имеет смысла.
User, Group – в этих полях указан пользователь и группа, с привилегиями которых будет запущена процессы программы.
HostnameLookups On – в процессе записи лог файла записывается имя хоста вместо ip адресов, рекомендуется отключать, это способствует ускорению работы ПО.
LogLevel – значение регулирует насколько подробно вести записи в журнал ошибок. По умолчанию установлено значение warn, но для того, чтобы лог заполнялся менее интенсивно достаточно установить значение error, это означает фиксировать только ошибки.
Include – этот параметр подключает другие файлы настроек веб-сервера рассмотренных выше.
Директива Directory задает настройку прав доступа к любой директории файловой системы. Синтаксис выглядит примерно так:
Параметр и значение
Здесь применимы следующие опции:
AllowOverride – определяет нужно ли позволять читать .htaccess файлы в указанной директории, это файлы настроек и аналогичным синтаксисом. All – разрешено все, None – задает значение не читать эти файлы.
Например:
AllowOverride AuthConfig
# или так
#AllowOverride All
DocumentRoot – задает значение из какого каталога подгружать файлы для показа посетителям сайта.
Options – задает политики доступа веб-сервера какие предоставить разрешения предоставить тот или иной доступ в указанной директории. Для примера рассмотрим значение, All – разрешает все, FollowSymLinks – разрешен переход по символическим ссылкам,
Indexes – отображает содержимое указанного каталога при отсутствии файла index.
Require – устанавливает политики доступа к этому каталогу. Require all denied – запрещено всем, Require all granted – разрешено всем. Применимо использование вместо all значение user или group чтобы явно задать политику подключения пользователя, как показано на примере ниже.
AuthType Basic
AuthName "Please enter your username and password"
AuthUserFile /var/www/unixweb.ru/.htpasswd
Require ip 192.168.122.1
Require valid-user
Order – позволяет управлять доступом к указанной выше директории. Применимы два значения Allow, Deny – разрешить для всех, кроме указанных или Deny, Allow – запретить для всех, кроме разрешенных. Далее мы можем закрыть всем доступ к директории, указав значение: Deny from all, а затем разрешить доступ для вашего IP, эта запись выглядит так Allow from 192.168.122.1 или хоста с именем unixweb.ru: Allow from unixweb.ru. IP адрес 192.168.122.1 замените на свое значение.
Внимание! Значения директивы Allow, Deny, Order модуля mod_access_compat нежелательны к применению, их считаются устаревшими, хотя поддержка осуществляется еще в версии Apache 2.4, но возможно следующих релизах они вероятно будут удалены.
Осталось рассмотреть файл /etc/apache2/ports.conf:
В текущем файле имеется только директива, Listen, значение задает номер порта, на котором будет работать программа.
Текущий файл /etc/apache2/envvars, вряд ли станете применять, в нем назначены переменные, которые актуально использовать в конфигурационных файлах при настройке Apache.
Внимание! В целом значение всех параметров рассчитывается индивидуально и зависит от конфигурации сервера. Выше описаны основные параметры для базовой настройки Apache, для более углубленного изучения материала, рекомендуем к прочтению официальную документацию, читать тут https://httpd.apache.org/docs/2.4/ .
Настройка Apache по средствам .htaccess
Файл .htaccess предоставляет возможность произвести настройки веб-сервера в Ubuntu или Debian Linux для настройки правил в определенном каталоге нашего проекта. Все заданные нами инструкции в этом файле выполняются как бы по умолчанию оборачиваются в Directory.
Важно отметить, чтобы web-сервер применил инструкции из .htaccess файла для этого каталога необходимо в главном файле сервера или файле виртуального хоста не должно установлено следующие значение AllowOverride None, для того чтобы применились все настройки, необходимо установить значение AllowOverride All.
В целом в текущем файле может быть выполнена почти любая настройка apache, которая задана настройками по умолчанию.
Практически все параметры были нами уже рассмотрены просто приведу пару примеров:
Order Deny, Allow
Deny from all
Устаревшее значение запрещает всем доступ к текущему каталогу.
Пример .htaccess файла:
Файл .htaccess чаще всего используется для эксплуатации модуля mod_rewrite, который применяет запросы сразу после внесения изменений.
# Пример файла .htaccess: <путь к каталогу вашего проекта>
AddDefaultCharset utf-8
AllowOverride All
Options -Indexes
# mod_rewrite rule example:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
В целом это тема для отдельной статьи, ссылку на материал добавлю позднее.
Настройка модулей Apache.
Как я ранее писал, веб-сервер Apache – модульное программное обеспечение, расширение функциональности происходить с помощью включения нужных нам модулей. Все доступные серверные модули и прочие файлы настроек расположены в каталоге /etc/apache2/mods-available. Активированные модули находятся в каталоге /etc/apache2/mods-enable.
Если вам интересно, вы можете анализировать содержимое этих каталогов.
Конфигурирование Apache 2.4, включение модулей происходит при выполнении специализированных команд. При необходимости можно посмотреть в командной строке все загруженные модули, сделать можно командой:
В процессе настройки Apache у вас может появиться следующая ошибка:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Исправляется она следующим образом, необходимо добавить запись ServerName localhost в главный файл конфигурации Apache. Открываем файл /etc/apache2/apache2.conf и добавляем недостающий параметр настроек. После внесенных изменений ошибка больше не будет появляться.
sudo nano /etc/apache2/apache2.conf
После проверяем корректность настроек конфигурационные файлы нашего веб сервера:
Справочная информация
Посмотреть все параметры утилиты apache2ctl можно так:
и так:
Для развернутого изучения всего функционала, выполните команду в терминале:
В случае появления следующей ошибки:
Выполните установку пакета man, сделать можно командой:
0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,538 kB of archives.
After this operation, 7,390 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Подтвердите установку пакета нажав Y и после клавишу Enter.
Управление модулями.
Произвести включение модуля можно командой:
А отключение модуля:
После включения или отключения модулей необходимо выполнить перезагрузку apache:
Если вывести содержимое этого файла, это будет выглядеть так:
# Depends: filter
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
Конечно, активировать модуль можно было бы просто добавив строку в файл apache2.conf. Но сейчас принято так делать, это необходимо, чтобы избежать путаницы.
Файлы с настройками модулей находятся в том же каталоге, только в файлы имеют расширение .conf вместо load. Теперь посмотрим настройки того же модуля deflate, при помощи команды cat:
cat /etc/apache2/mods-available/deflate.conf
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/wasm
AddOutputFilterByType DEFLATE application/xml
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Файлы в каталоге conf-available, это тоже модули, но они были установлены отдельно от apache, это могут быть файлы для конфигурирования и включения модулей, например php или прочего программного интерпретатора. Все работает аналогично как описано выше, только команды для включения и отключения модулей немного другие:
Включение:
Выключение:
Как вы заметили, управлять модулями довольно просто. Давайте включим необходимые нам модуле, которые не включены:
Важно знать! Команды: a2enmod, a2dismod, a2enconf, a2disconf, a2ensite, a2dissite при выполнении создают или удаляют символьные ссылки на файл модуля с имеющим расширение load в каталоге mods-available.
Такие модули как expires и headers снижают загруженность сервера. За счет модулей отдается заголовок Not Modified, если страница сайта не была изменена с последнего запроса.
Модуль expiries задает время, для браузера на которое должен кэшироваться полученная страница.
Модуль Rewrite даёт возможность применять запрашиваемые URL на лету, это актуально для создания ЧПУ ссылок и т д.
А модуль ssl нужен для шифрования трафика по средствам SSL сертификата. После включения и отключения модулей не забывайте делать перезагрузку apache2 и также после внесения изменений в конфигурационных файлах.
Настройка виртуальных хостов Apache.
Было бы крайне неудобно, если на одном сервере была возможность размещать только один сайт. Apache имеет возможность размещать сотни веб-сайтов на одном физическом или виртуальном сервере и отдавать пользователям индивидуальное содержимое для каждого хоста. Для этих задач реализован функционал виртуальных хостов. В начале сервер определяет к какому именно домену приходит http запрос и после этого происходит отдача нужного содержимого из каталога нужного хоста.
Файл виртуального хоста.
Настройки для виртуальных хостов Apache находятся в каталоге /etc/apache2/sites-available/. При создании нового хоста необходимо создать новый файл с именем домена и выполнить необходимую конфигурацию. Настройки виртуального оборачиваются директивой VirtualHost. На примере сайта unixweb.ru это выглядит приблизительно так:
ServerName unixweb.ru
ServerAlias www.unixweb.ru
ServerAdmin [email protected]
DirectoryIndex index.php index.html
DocumentRoot /var/www/unixweb.ru
<Directory "/var/www/unixweb.ru">
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Значение параметров размещенных в VirtualHost:
ServerName – задается основное имя домена.
ServerAlias – задается дополнительное имя, по которому будет доступен сайт.
ServerAdmin – электронная почта администратора сайта.
DirectoryIndex – указываем файлы index с расширением html, php, htm.
DocumentRoot – каталог, где расположен сайт домена.
ErrorLog – лог ошибок.
CustomLog – лог обращений к сайту.
В переменной ${APACHE_LOG_DIR} задан по умолчанию этот каталог /var/log/apache2 используемый для хранения логов.
Каталог сайта.
Перед включением нашего сайта, создадим каталог, который указан в директиве DocumentRoot Apache. Выполним команду от пользователя root:
Пока создадим пустой файл index.html, также вы можете выгрузить простой сайт сделанный на html. Выполните команду:
echo '<h1>Welcome to site!</h1>' > /var/www/unixweb.ru/index.html
Для работы сайта на PHP следует произвести установку и настройку php интерпретатора, баз данных MySQL, PHPMyAdmin, но это тема другой статьи.
Права доступа для корректной работы сайта.
Также для корректной работы сайта, желательно установить права доступа на файлы и каталоги в директории сайта DocumentRoot.
Выполните следующие команды:
find /var/www/unixweb.ru/ -type d -exec chmod 0755 {} \;
find /var/www/unixweb.ru/ -type f -exec chmod 0644 {} \;
Внимание! Пожалуйста, измените значение директивы DocumentRoot, как показано в примерах выше. Название каталога сайта unixweb.ru замените на ваше значение. Включая все команды, где написано unixweb.ru.
Виртуальные хосты, как и модули нужно включить. Для этого реализованные специальные утилиты командной строки. Чтобы включить нужный нам сайт, наберите:
Активируем и деактивируем сайт.
Здесь unixweb.ru – имя конфигурационного файла виртуального хоста замените на свое.
Для отключения выполните команду:
Проверяем работу Apache.
tcp6 0 0 :::80 :::* LISTEN 81/apache2
tcp6 0 0 :::443 :::* LISTEN 81/apache2
Тут наглядно показано, что веб-сервер прослушивает порты 80 и 443.
Открываем порты Apache.
При установке операционной системы Debian и Ubuntu firewall отключен, по этому рекомендуется его обязательно настроить, но это тема отдельной статьи.
Рассмотрим случай когда Firewall включен на примере iptables и ufw, и нам нужно открыть порты для корректной работы Apache. Приведу несколько команд для открытия портов 80 и 443.
Пример для утилиты iptables:
Пример для ufw:
sudo ufw allow http
# или так
sudo ufw allow 80/tcp
# или так
sudo ufw allow 'Apache'
# Открываем 443 порт
sudo ufw allow https
# или так
sudo ufw allow 443/tcp
# или так
sudo ufw allow 'Apache Secure'
Рекомендую ознакомиться с официальной документацией по работе с iptables и ufw, без этого вы не сможете корректно настроить Firewall.
Настройка на локальном сервере.
Конфигурирование виртуального хоста на этом завершена, но, вам необходима настройка Apache для разработки на локальной машине Linuх, достаточно произвести настройку в файле /etc/hosts это нужно для того, чтобы браузеру сообщить о новом сайте на локальном ПК.
Открываем файл в редакторе nano воспользовавшись терминалом командной строки. В самом начале указываем IP сервера на котором будет или размещен сайт, задаем через пробел значение ServerName и значение ServerAlias. В моем случае это 192.168.122.174 unixweb.ru www.unixweb.ru. Пожалуйста, замените записи на свои значения.
Сделать можно так:
И вносим следующие записи
192.168.122.174 unixweb.ru www.unixweb.ru
Проверка работы локального сайта
Теперь сайт должен открыться в браузере после внесения этих правок, открывайте браузер, проверяйте.
Если вы хотите опубликовать сайт в интернете нужно произвести настройки Apache на VPS или физическом сервере. После настроить DNS для вашего домена, но это тема отдельной статьи.
Подведем итог.
На этом завершена установка Apache и базовая настройка, вы можете применять эту инструкцию для реализации своего web-сервера. Инструкция актуальна исключительно в операционных системах Debian и Ubuntu. Все же одной статьи недостаточно, чтобы раскрыть тему, достаточно глубоко, эта тема целого цикла статей.
Вам понравилась статья поделитесь ссылкой на этот материал в социальных сетях и подпишитесь на нашу рассылку. У вас остались еще вопросы, напишите мне или задайте ваш его в комментариях или просто поделитесь своим мнением!
Если вы обнаружили неточность или ошибку буду Вам признателен если вы сообщите об этом, пишите мне и сразу поправлю статью.