Введение

HTTP сервер Apache является самым широко используемым веб-сервером в мире. Он предоставляет множество удобных функций включая динамически загружаемые модули, широкую поддержку мультимедиа, и интеграцию с другим популярным программным обеспечением.

В этом руководстве мы расскажем, как установить веб-сервер Apache на ваш сервер с Ubuntu 18.04.

Необходимые условия

apache illustration for: Необходимые условия

Перед тем, как начать следовать шагам, описанным в этом руководстве, вам необходимо настроить отдельный, не-рутовый (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

				
			

Вы увидите список приложений пользователей:

				
					
[secondary_label Вывод]

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 трафик разрешён:

				
					
[secondary_label Вывод]

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

				
			
				
					
[secondary_label Вывод]

● 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, но вам следует заменить его вашим собственным доменным именем. Для того, чтобы узнать больше о настройке доменных имён в the cloud provider, рекомендуем ознакомиться с нашим Введением в DNS the cloud provider.

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:

				
					
[label /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/&lt;^&gt;example.com&lt;^&gt;.conf

				
			

Скопируйте следующий текст настроек виртуального хоста в созданный файл:

				
					
[label /etc/apache2/sites-available/example.com.conf]

&lt;VirtualHost *:80&gt;

    ServerAdmin &lt;^&gt;admin@example.com&lt;^&gt;

    ServerName &lt;^&gt;example.com&lt;^&gt;

    ServerAlias &lt;^&gt;www.example.com&lt;^&gt;

    DocumentRoot /var/www/&lt;^&gt;example.com&lt;^&gt;/html

    ErrorLog ${APACHE_LOG_DIR}/error.log

    CustomLog ${APACHE_LOG_DIR}/access.log combined

&lt;/VirtualHost&gt;

				
			

Обратите внимание, что мы обновили DocumentRoot на адрес нашей новой директории, и ServerAdmin на адрес электронной почты, доступный для администратора example.com. Мы также добавили две директивы: ServerName, которая устанавливает базовое доменное имя, которое должно использоваться для хоста, а также ServerAlias, которая определяет другие имена, которые должны использоваться для отображения хоста так же, как и базовое доменное имя.

Сохраните и закройте файл после внесения изменений.

Теперь активируем профиль сайта с помощью утилиты a2ensite:

				
					
sudo a2ensite &lt;^&gt;example.com&lt;^&gt;.conf

				
			

Деактивируем дефолтный сайт, определённый в 000-default.conf:

				
					
sudo a2dissite 000-default.conf

				
			

Далее проверим наши настройки на наличие ошибок:

				
					
sudo apache2ctl configtest

				
			

Вы должны увидеть следующий вывод:

				
					
[secondary_label Вывод]

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 определяет, насколько детальными должны быть записи об ошибках.

Заключение

Теперь, когда ваш веб-сервер установлен, у вас есть множество вариантов того, что делать дальше. Если вы хотите построить более полный стек приложений, вы можете ознакомиться с нашим руководством по установке и настройке стека LAMP на Ubuntu 18.04.