Установка и настройка Apache

Apache – это веб-сервер – программа, передающая и получающая данные по протоколам HTTP и HTTPS. В основном используются релизы второй версии, то есть Apache 2.

С помощью модулей Apache, к нему можно добавлять поддержку различных языков программирования.

Apache входит в основные репозитории Ubuntu, поэтому устанавливается командой sudo apt install apache2. Перед этим рекомендуют обновить локальный индекс пакетов: sudo apt update.

После установки Apache зарегистрирует себя в UFW, создав несколько профилей:

Профили Apache в UFW

Профиль Apache открывает порт 80, по которому идет обычный незашифрованный веб-трафик. Профиль Apache Full открывает как порт 80, так и 443, по которому трафик шифруется с помощью TLS/SSL. Apache Secure открывает только порт 443.

Теперь следует настроить поведение брандмауэра по отношению к Apache. Обычно разрешают доступ к веб-серверу по обоим портам:

sudo ufw allow 'Apache Full'

Проверяем статус сервисов:

Статус сервисов в UFW после разрешения доступа для Apache

Вариант с v6 означает поддержку сетевого протокола IPv6.

Apache после установки сразу запускается, что можно проверить командой systemctl status apache2. Среди вывода должна быть выделенная надпись "active (running)". Для выхода нажать q.

Теперь, если набрать в браузере IP сервера, должна отображаться стартовая страница Apache:

Стартовая страница Apache

Если планируется на сервере размещать не один сайт, следует выполнить настройку виртуальных хостов. Каждый хост будет содержать настройки для отдельно взятого сайта.

По умолчанию в Apache уже есть один виртуальный хост, настроенный на отдачу документов из каталога /var/www/html/:

Каталог /var/www/html/

Файл index.html – это тот, который мы видим, набрав в браузере IP-адрес нашего сервера. Если на сервере планируется разместить один сайт, то его файлы можно поместить в данный каталог, удалив исходный index.html.

Корневые каталоги других сайтов также рекомендуется размещать в директории /var/www/. Например, корневой каталог сайта может выглядеть так /var/www/younglinux.info/html, или /var/www/younglinux.info/, или /var/www/younglinux.info/public_html/ и т. п.

Для создания цепочки каталогов, команду mkdir следует использовать с ключом -p. Также выполнять команду надо под sudo, так как права на /var/www/ принадлежат пользователю root.

Создание каталога для сайта в /var/www/

Теперь следует поменять владельца каталога с файлами сайта на текущего пользователя и его группу. Иначе редактировать файлы будет не удобно:

Смена владельца каталога сайта

С помощью редактора nano или vim создадим тестовую страницу HTML. Для nano команда будет такой: nano /var/www/younglinux.info/index.html:

Редактирование страницы сайта в nano

Подготовив каталог, переходим к непосредственной настройке виртуальных хостов в Apache.

Конфигурационные файлы виртуальных хостов находятся в каталоге /etc/apache2/sites-available/:

sites-available - каталог для конфигурационных файлов виртуальных хостов в Apache

Файл 000-default.conf содержит настройки хоста для каталога /var/www/html/. Для других виртуальных хостов создаются отдельные файлы с подобным представленному ниже содержанием. Обратите внимание на имя файла. Оно имеет расширение conf, а называется именем домена. Создавать файл надо под sudo.

Содержимое конфигурационного файла сайта

Доступный (available) виртуальный хост – не значит включенный (enabled). Если мы посмотрим каталог /etc/apache2/sites-enabled/, то не увидим там ссылку на конфигурационный файл нового хоста:

Каталог sites-enabled

Чтобы она там появилась, надо выполнить команду sudo a2ensite ваш_сайт.conf, желательно проверить отсутствие ошибок и перезагрузить Apache:

Команда a2ensite и перезагрузка Apache

Теперь сайт будет открываться через браузер по доменному имени, если вы добавили домен с соответствующими настройками DNS в "Личном кабинете" хостинговой компании.

Кроме того, у регистратора доменных имен заранее должны быть указаны NS-серверы хостера. Их обновление обычно занимает некоторое время.

Если же требуется только протестировать сайт, следует свой локальный компьютер (не VPS) при запросе соответствующего домена направлять на IP вашего сервера. В системах Linux для этого редактируется файл /etc/hosts:

Файл /etc/hosts

Обратите внимание, поскольку сертификат для протокола HTTPS не устанавливался, сайт будет доступен только по адресу, который начинается с http.

Разрешение переопределения и перезаписи .htaccess

По умолчанию в Apache отключено использование файлов .htaccess. Однако они часто требуются для настройки директорий к поведению веб-сервера. Эти файлы широко используются в каталогах таких CMS как Drupal и WordPress.

Чтобы разрешить файлы .htaccess для конкретного сайта (его корневого каталога), надо прописать директиву AllowOverride в соответствующем сайту конфигурационном файле Apache, который находится в каталоге /etc/apache2/sites-available/.

Эта директива располагается внутри блока Directory, который находится внутри блока VirtualHost:

Директива AllowOverride, позволяющая файлы .htaccess в каталогах сайта

Когда сайт переводится на протокол HTTPS, в sites-available появляется еще один конфигурационный файл, уже для порта 443. В этом файле также надо прописать AllowOverride, или она прописывается сама, если сертификат устанавливается после того, как директива была прописана в конфигурационном файле для порта 80.

Директива AllowOverride в файле для порта 443

После установки директивы следует включить модуль перезаписи mod_rewrite, проверить конфигурацию на наличие ошибок и перезапустить Apache:

sudo a2enmod rewrite
sudo apache2ctl configtest
sudo systemctl restart apache2

Хост по умолчанию (000-default.conf) можно отключить, если он не используется. Однако в этом случае может появиться проблема, когда при обращении по IP будет открываться один из сайтов, расположенных на VPS (видимо первый по алфавиту). Такое поведение нежелательно, так как сайт становится доступным фактически по двум разным адресам. Поэтому сайт-заглушку не стоит отключать. Можно добавить в 000-default.conf редирект на другой хост (в примере ниже предполагается, что для сайта уже был выпущен сертификат безопасности):

RewriteEngine on
RewriteRule ^/(.*)$ https://scienceland.info/$1

У некоторых хостеров такой проблемы нет. При обращении к серверу по IP и отключенном/отсутствующем файле 000-default.conf происходит редирект на один из доменов.

Другой вариант избегания доступности сайта по IP - не переименовывать 000-default.conf, а использовать его для настройки одного из сайтов. Однако это не означает, что при обращении по IP будет происходить перенаправление на имя домена. Может возникать отказ "Forbidden".

Если изображения сайта не отображаются в браузере, проблема может быть в правах доступа к каталогу (возможно это проблема только статичных сайтов, то есть на сервере находятся готовые файлы .html). У каталога с картинками должно быть разрешение 755, если его владельцем является не www-data (и, возможно, не root). То есть создавался обычный пользователь, под которым выполняется загрузка файлов сайта. Команда смены разрешения:

$ chmod -R 755 /var/www/pas1.ru/img/

Другой вариант - сменить владельца на www-data. Однако в этом случае его придется менять каждый раз, когда на сервер будут загружаться новые изображения.