Установка и настройка Apache
Apache – это веб-сервер – программа, передающая и получающая данные по протоколам HTTP и HTTPS. В основном используются релизы второй версии, то есть Apache 2.
С помощью модулей Apache, к нему можно добавлять поддержку различных языков программирования.
Apache входит в основные репозитории Ubuntu, поэтому устанавливается командой sudo apt install apache2
. Перед этим рекомендуют обновить локальный индекс пакетов: sudo apt update
.
После установки Apache зарегистрирует себя в UFW, создав несколько профилей:

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

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

Если планируется на сервере размещать не один сайт, следует выполнить настройку виртуальных хостов. Каждый хост будет содержать настройки для отдельно взятого сайта.
По умолчанию в Apache уже есть один виртуальный хост, настроенный на отдачу документов из каталога /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.

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

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

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

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

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

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

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

Обратите внимание, поскольку сертификат для протокола HTTPS не устанавливался, сайт будет доступен только по адресу, который начинается с http.
Разрешение переопределения и перезаписи .htaccess
По умолчанию в Apache отключено использование файлов .htaccess. Однако они часто требуются для настройки директорий к поведению веб-сервера. Эти файлы широко используются в каталогах таких CMS как Drupal и WordPress.
Чтобы разрешить файлы .htaccess для конкретного сайта (его корневого каталога), надо прописать директиву AllowOverride
в соответствующем сайту конфигурационном файле Apache, который находится в каталоге /etc/apache2/sites-available/.
Эта директива располагается внутри блока Directory
, который находится внутри блока VirtualHost
:

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

После установки директивы следует включить модуль перезаписи 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. Однако в этом случае его придется менять каждый раз, когда на сервер будут загружаться новые изображения.