###### tags: `МДК02.05 Организация администрирования операционных систем Linux` `Linux`
# Лабораторная работа №9. Настройка веб сервера Apache.
### Тема: Настройка веб сервера Apache.
##### Цель работы: Научиться настраивать web сервер Apache на OC Linux.
##### Необходимые материалы: Пк с доступом в интернет. Виртуальные машины с Linux Debian и Ubuntu.
## Теоретическая часть
Интернет невозможно представить без всевозможных сайтов. Все они работают за счёт веб-серверов – программ, отвечающих за передачу данных от физических хранилищ до браузеров пользователей.
Веб-сервер работает в качестве «посредника» между пользователем и физическим сервером. При получении запроса от посетителя он ищет необходимую страницу в каталоге с сайтом и отправляет её в ответ. Браузер принимает полученный файл, обрабатывает его и отображает на экране посетителя.
Передача информации веб-сервера выполняется по протоколу HTTP (HyperText Transfer Protocol), изначально созданного для работы с HTML-страницами. Уже позже стало возможным отправлять через HTTP файлы любых типов. В последнее время преобладают сайты, работающие через HTTPS. Это улучшенная версия HTTP, которая отличается от предшественника тем, что поддерживает шифрование трафика TLS/SSL между пользователем и сервером.
Звание самого популярного веб-сервера в мире уже более 25 лет удерживает за собой Apache HTTP Server, который принято называть сокращенно Apache или «Апач». Сегодня программа обслуживает более 40% всех существующих серверов, включая проекты IBM, eBay, PayPal и Facebook.
:::success
Apache – это свободное программное обеспечение для размещения веб-сервера. Он хорошо показывает себя в работе с масштабными проектами, поэтому заслуженно считается одним из самых популярных веб-серверов. Кроме того, Apache очень гибок в плане настройки, что даёт возможность реализовать все особенности размещаемого веб-ресурса.
:::
### Конфигурация
Система конфигурации Apache работает на текстовых файлах с прописанными настройками. Она подразделяется на три условных уровня, для каждого из которых имеется свой конфигурационный файл:
Уровень конфигурации сервера (файл httpd.conf) – основной конфигурационный файл. Действие распространяется на весь механизм веб-сервера.
Уровень каталога (файл .htaccess) – дополнительный конфигурационный файл. Его директивы охватывают только каталог, где расположен файл, а также вложенные подкаталоги.
Уровень виртуального хоста (файл httpd.conf> или extra/httpd-vhosts.conf).
Обычно конфигурационные файлы Apache находятся в папке «conf», а дополнительные конфигурационные файлы во вложенной в нее папке «extra». Внести изменения можно как через редактирование самого файла, так и через командную строку.
### Виртуальные хосты
:::success
Веб-хост (виртуальный хост) – это компонент сервера, отвечающий за обслуживание одного размещенного на нем объекта (сайта). Система виртуальных хостов Apache позволяет одновременно запускать несколько проектов с одного IP-адреса.
:::
В Apache можно установить настройки модуля и ядра, а также вводить лимиты на потребление серверных ресурсов (трафик, RAM, CPU) для каждого виртуального хоста в отдельности. Это технологическая основа всего механизма веб-хостинга.
## Практическая часть
1. Создайте снимок состояния виртуальной машины Debian. Виртуальная машина должна иметь сетевой интерфейс в режиме сетевого моста.
1. Установите веб сервер Apache2 на Debian
```bash=
apt update
apt install apache2
```
2. Проверьте доступность сервера перейдя по адресу виртуальной машины в браузере. Используйте сетевой мост для настроек сетевого адаптера. Вы должны увидить приветственную страницу Apache: 
3. Создайте директорию для web сайта и добавьте в нее файл `index.html`:
```bash=
mkdir -p /var/www/sample.net/html
touch /var/www/sample.net/html/index.html
echo "<h1>Hellow Apache2</h1>" > /var/www/sample.net/html/index.html
```
4. Создайте файл конфига сайта на основе шаблона по умолчанию:
```bash=
cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/sample.net.conf
```
5. Теперь откройте скопированный файл. Поменяйте строку которая узазывает путь к директории виртуального хоста. Чтобы при обращении Аpache мог перенаправить запрос именно к созданному нами виртуальному хосту.
```
nano /etc/apache2/sites-available/sample.net.conf
```
Файл виртуального хоста по умолчанию выглядит так:
```bash
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
```
- **`<VirtualHost *:80>`** — в этой строке указываем ip-адрес сервера, а также порт, используемый для этого виртуального хоста. На данный момент мы используем HTTP и один ip-адрес. В связи с этим номер порта 80, адрес не указываем.
- **`ServerAdmin webmaster@localhost`** — строка связи с администратором, необходимо указать активный почтовый адрес отвечающего за обслуживание сервера специалиста. Опционально.
- **`DocumentRoot /var/www/html`** — root-директория или корневой каталог виртуального хоста. Обязательна к применению и настройке. В нашем случае это путь к созданной ранее директории с документом `index.html`. Вносим изменения: `/var/www/sample.net/html`
- **`ErrorLog ${APACHE_LOG_DIR}/error.log`** — путь к файлу с логами сервера. Вносить какие-либо изменения нет необходимости. Здесь будут храниться ошибки запуска демона и ошибки, не относящиеся к клиентам.
- **`CustomLog ${APACHE_LOG_DIR}/access.log`** combined — это директива для хранения логов клиентского доступа.
Это минимальная конфигурация для запуска виртуального хоста на Apache web-сервере:
```bash=
<VirtualHost *:80>
ServerName sample.net
ServerAdmin support@selectel.ru
DocumentRoot /var/www/sample.net/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
```
6. Для подключения виртуальных хостов, а также модулей в Apache HTTP-сервере используется набор команд:
- **`a2enmod {модуль}`** — подключение модуля;
- **`a2dismod {модуль}`** — отключение модуля;
- **`a2ensite {конфиг виртуального хоста}`** — подключает виртуальный хост;
- **`a2dissite {конфиг виртуального хоста}`** — отключает виртуальный хост.
Включите созданный виртуальный хост
```
sample.net.conf
```
Отключите конфигурационный файл по умолчанию:
```
a2dissite 000-default.conf
```
После внесенных изменений требуется перечитать конфигурацию сервера:
```
systemctl reload apache2
```
7. Откройте в браузере ip адрес виртуальной машины. В отчете отобразите скриншот с url строкой браузера 
8. Включите обратно конфигурационный файл по умолчанию. Посмотрите какая страница отображаеться в браузере.
9. Для того чтобы виртуальный хост работал коректно веб сервер должен увидить в загаловках HTTP доменное имя сайта. Для того чтобы открыть сайт по доменному имени sample.net нужно либо иметь свой dns сервер либо изменить параметры файла hosts на клиентском ПК. Вы его можете найти по следующим путям:
- Windows 7 - 10 Диск C: ➝ Windows ➝ System 32 ➝ drivers ➝ etc ➝ hosts.
- В Linux или Mac OS `/etc/hosts`
Добавьте в файл строку:
```
ip_адрес sample.net
```
10. Перейдите в браузере на сайт по доменному имени: 
11. Скачайте любой bootstrap макет сайта и создайте для него виртуальный хост в качестве имени сайта используйте фамилия.local.
## Контрольные вопросы
1. **Что такое веб-сервер?**
2. **С какими протоколами работает Apache?**
3. **Расскажите зачем нужны виртуальные хосты?**
4. **Что нужно указать для минимальной конфигурации Apache?**
5. **Что нужно сделать чтобы сайт открывался по доменному имени?**