Введение
HTTP сервер Apache является самым широко используемым веб-сервером в мире. Он предоставляет множество удобных функций включая динамически загружаемые модули, широкую поддержку мультимедиа, и интеграцию с другим популярным программным обеспечением.
В этом руководстве мы расскажем, как установить веб-сервер Apache на ваш сервер с Ubuntu 18.04.
Необходимые условия
Перед тем, как начать следовать шагам, описанным в этом руководстве, вам необходимо настроить отдельный, не-рутовый (non-root) профиль пользователя на вашем сервере с Ubuntu 18.04. Кроме того, вам потребуется настроить базовый файрвол для блокирования всех портов, кроме необходимых для работы Apache. Вы можете ознакомиться с процессом настройки аккаунта пользователя и настройкой файрвола на вашем сервере следуя шагам нашего руководства по первичной настройке сервера на Ubuntu 18.04.
После завершения создания аккаунта войдите на ваш сервер с помощью вновь созданного пользователя.
Шаг 1 - Установка Apache
Apache доступен из дефолтных репозиториев Ubuntu, что позволяет устанавливать его с помощью средств управления пакетами.
Давайте начнём с обновления локального индекса пакетов:
- sudo apt update
Далее установим пакет
apache2
:
- sudo apt install apache2
После подтверждения установки
apt
установит Apache и все необходимые зависимости.Шаг 2 - Настройка файрвола
Перед тестированием установки Apache необходимо изменить настройки файрвола для разрешения доступа извне к дефолным веб-портам. Если вы следовали инструкциям по настройке файрвола из руководства по первичной настройке сервера, ваш файрвол UFW уже должен быть настроен таким образом, чтобы ограничивать доступ к вашему серверу.
В процессе установки Apache регистрирует себя в конфигурации UFW, создавая несколько профилей приложения, которые могут быть использованы для включения и отключения доступа к Apache через файрвол.
Выведем профили приложений
ufw
следующей командой:
- sudo ufw app list
Вы увидите список приложений пользователей:
Вывод
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Как видно из этого вывода, для Apache доступно три профиля:
- Apache: этот профиль открывает порт 80 (обычный, не шифрованный веб-трафик).
- Apache Full: этот профиль открывает порты 80 (обычный, не шифрованный веб-трафик) и 443 (трафик шифруется с помощью TLS/SSL).
- Apache Secure: этот профиль открывает только порт 443 (трафик шифруется с помощью TLS/SSL).
Рекомендуется включать самый ограниченный профиль, который будет позволять входящий трафик. Поскольку мы не настраивали SSL для нашего сервера в этом руководстве, нам потребуется включить только порт 80:
- sudo ufw allow 'Apache'
Вы можете проверить внесённые изменения командой:
- sudo ufw status
В выводе вы должны видеть, что HTTP трафик разрешён:
Вывод
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
Как видно из этого вывода профиль был включен для разрешения доступа к веб-серверу.
Шаг 3 - Проверка вашего веб-сервера
После завершения процесса установки Ubuntu 18.04 запустит Apache. Веб-сервер уже должен быть запущен.
Проверим в системе инициализации
systemd
, что сервис работает, следующей командой:
- sudo systemctl status apache2
Вывод
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Tue 2018-04-24 20:14:39 UTC; 9min ago
Main PID: 2583 (apache2)
Tasks: 55 (limit: 1153)
CGroup: /system.slice/apache2.service
├─2583 /usr/sbin/apache2 -k start
├─2585 /usr/sbin/apache2 -k start
└─2586 /usr/sbin/apache2 -k start
Как видно из представленного вывода, сервис выглядит работающим корректно. Тем не менее, самый надёжный способ проверить работу Apache - это запросить веб-страницу.
Вы можете запросить дефолтную веб-страницу Apache с помощью IP адреса вашего сервера. Если вы не знаете IP адрес вашего сервера, вы можете найти его несколькими способами с помощью командной строки.
Введите следующую команду:
- hostname -I
Она вернёт несколько адресов, разделённых пробелами. Вы можете попробовать каждый из них в вашем веб-браузере.
Другой способ заключается в использовании команды, которая позволяет увидеть ваш IP адрес из другого места в сети Интернет:
- curl -4 icanhazip.com
После того, как вы найдёте IP адрес вашего сервера, введите его в свой веб-браузер:
- http://IP_адрес_вашего_сервера
Вы должны увидеть дефолтную страницу Apache для Ubuntu 18.04:
Эта страница свидетельствует о том, что Apache работает корректно. На этой странице также представлена базовая информация о важных файлах и директориях Apache.
Шаг 4 - Управление процессом Apache
Теперь, когда у вас есть работающий веб-сервер, рассмотрим некоторые базовые команды для управления им.
Для остановки себ-сервера наберите:
- sudo systemctl stop apache2
Для запуска остановленного сервера наберите:
- sudo systemctl start apache2
Для перезапуска сервиса наберите:
- sudo systemctl restart apache2
Если вы вносите какие-то изменения в конфигурацию, Apache зачастую может перезагружаться без потери открытых соединений. Для этого наберите команду:
- sudo systemctl reload apache2
По умолчанию Apache сконфигурирован на запуск при загрузке сервера. Вы можете отключить такое поведение следующей командой:
- sudo systemctl disable apache2
Для повторного включения сервиса при загрузке сервера наберите:
- sudo systemctl enable apache2
Теперь Apache должен опять запускаться автоматически при загрузке сервера.
Шаг 5 - Настройка виртуальных хостов (рекомендуется)
При использовании веб-сервера Apache вы можете использовать виртуальные хосты (аналог серверных блоков в Nginx) для хранения конфигурационных настроек разных сайтов. Это позволяет иметь более одного сайта на одном сервере. В этом руководстве мы будем для примера использовать доменное имя example.com, но вам следует заменить его вашим собственным доменным именем. Для того, чтобы узнать больше о настройке доменных имён в DigitalOcean, рекомендуем ознакомиться с нашим Введением в DNS DigitalOcean.
Apache для Ubuntu 18.04 уже имеет один виртуальный хост, включенный по умолчанию, который настроен на отдачу документов из директории
/var/www/html
. Хотя это и удобно для обслуживания одного сайта, это становится неудобным, когда сайтов несколько. Вместо того, чтобы изменять /var/www/html
, давайте создадим новую структуру директорий внутри /var/www
для нашего сайта example.com, оставив /var/www/html
для показа дефолтной страницы пользователям в случаях, когда клиентский запрос не совпадает ни с одним из настроенных доменных имён.
Создайте директорию для example.com используя флаг
-p
для создания необходимых родительских директорий:
- sudo mkdir -p /var/www/example.com/html
Далее настройте владельца директории с помощью переменной окружения
$USER
:
- sudo chown -R $USER:$USER /var/www/example.com/html
Теперь права должны для корневой директории быть настроены правильным образом при условии, что вы не меняли своё значение
umask
. На всякий случай мы можем удостовериться в этом командой:
- sudo chmod -R 755 /var/www/example.com
Далее создадим страницу
index.html
в nano
или любом другом текстовом редакторе:
- nano /var/www/example.com/html/index.html
Добавим в файл следующий HTML:
/var/www/example.com/html/index.html
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
Сохраните и закройте файл.
Для того, чтобы Apache мог отдавать этот контент, нам необходимо настроить виртуальный хост с корректными настройками. Вместо того, чтобы редактировать существующий файл виртуального хоста
/etc/apache2/sites-available/000-default.conf
, создадим новый файл для нашего сайта - /etc/apache2/sites-available/example.com.conf
:
- sudo nano /etc/apache2/sites-available/example.com.conf
Скопируйте следующий текст настроек виртуального хоста в созданный файл:
/etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Обратите внимание, что мы обновили
DocumentRoot
на адрес нашей новой директории, и ServerAdmin
на адрес электронной почты, доступный для администратора example.com. Мы также добавили две директивы: ServerName
, которая устанавливает базовое доменное имя, которое должно использоваться для хоста, а также ServerAlias
, которая определяет другие имена, которые должны использоваться для отображения хоста так же, как и базовое доменное имя.
Сохраните и закройте файл после внесения изменений.
Теперь активируем профиль сайта с помощью утилиты
a2ensite
:
- sudo a2ensite example.com.conf
Деактивируем дефолтный сайт, определённый в
000-default.conf
:
- sudo a2dissite 000-default.conf
Далее проверим наши настройки на наличие ошибок:
- sudo apache2ctl configtest
Вы должны увидеть следующий вывод:
Вывод
Syntax OK
Перезапустите Apache для применения внесённых изменений:
- sudo systemctl restart apache2
Теперь Apache должен работать с вашим доменным именем. Вы можете проверить это введя
http://example.com
в вашем браузере, где в результате вы должны увидеть что-то в этом роде:Шаг 6 - Важные файлы и директории Apache
Теперь, когда вы знаете, как управлять сервисом Apache, вам стоит ознакомиться с важными файлами и директориями Apache.
Контент
/var/www/html
: фактический веб-контент, который по умолчанию состоит только из дефолтной страницы Apache, которую мы видели ранее, хранится в директории/var/www/html
. Это может быть изменено в конфигурационных файлах Apache.
Конфигурация сервера
/etc/apache2
: это конфигурационная директория Apache. Все файлы конфигурации Apache находятся здесь./etc/apache2/apache2.conf
: главный конфигурационный файл Apache. Изменения в этом файле влияют на глобальную конфигурацию Apache. Этот файл отвечает за загрузку многих других файлов из конфигурационной директории./etc/apache2/ports.conf
: этот файл определяет порты, которые Apache будет слушать. По умолчанию Apache слушает порт 80, а также порт 443 при условии, что модуль для работы с SSL включен./etc/apache2/sites-available/
: в этой директории хранятся файлы виртуальных хостов. Apache не использует файлы из этой директории, если ссылки на них нет в директорииsites-enabled
. Обычно настройка всех файлов виртуальных хостов осуществляется в этой директории, а активация хоста происходит путём создания ссылки в другой директории командойa2ensite
./etc/apache2/sites-enabled/
: директория, в которой хранятся активированные виртуальные хосты. Обычно это делается путём создания ссылки на файл конфигурации хоста из директорииsites-available
с помощью командыa2ensite
. Apache читает конфигурационный файлы и ссылки из этой директории при запуске или перезапуске./etc/apache2/conf-available/
,/etc/apache2/conf-enabled/
: эти директории связаны друг с другом так же, как иsites-available
иsites-enabled
связаны друг с другом, но используются для хранения фрагментов конфигурации, которые не принадлежат виртуальным хостам. Файлы в директорииconf-available
могут быть включены командойa2enconf
и выключены командойa2disconf
./etc/apache2/mods-available/
,/etc/apache2/mods-enabled/
: эти директории содержат, соответственно, доступные и активные модули. Файлы, оканчивающиеся на.load
, содержат фрагменты для загрузки конкретных модулей, а файлы, оканчивающиеся на.conf
, содержат настройки этих модулей. Модули можно активировать командойa2enmod
и деактивировать командойa2dismod
.
Серверные логи
/var/log/apache2/access.log
: по умолчанию каждый запрос к вашему веб-серверу записывается в этом файле, если только Apache не настроен на другое поведение./var/log/apache2/error.log
: по умолчанию все ошибки записываются в этот файл. ДирективаLogLevel
в конфигурации Apache определяет, насколько детальными должны быть записи об ошибках.