Перемещение корневого каталога Apache в Ubuntu 18.04

В Ubuntu веб-сервер Apache по умолчанию хранит файлы в корневом каталоге /var/www/html, который обычно расположен в одной файловой системе вместе с остальными компонентами операционной системы. Но в некоторых ситуациях лучше переместить этот каталог в другое место, например в отдельную смонтированную файловую систему.

При обслуживании нескольких веб-сайтов с помощью одного экземпляра Apache можно поместить каталог document root каждого сайта в отдельный том. Это позволяет масштабировать сервер в соответствии с потребностями конкретного сайта или клиента.

Этот мануал поможет переместить каталог document root в новое место.

Требования

  • Сервер Ubuntu 18.04, настроенный по этому мануалу (включая пользователя с доступом к sudo).
  • Установленный сервер Apache (инструкции по установке можно найти в мануале Установка веб-сервера Apache в Ubuntu 18.04).
  • Поддержка SSL (читайте Создание сертификата Let’s Encrypt для Apache в Ubuntu 18.04). В мануале мы используем условный домен example.com.
  • Новое место хранения для document root. В данном мануале показано, как переместить данные в блочное хранилище, смонтированное в /mnt/volume-nyc1-01. Это поможет вам переместить каталог данных в новое место независимо от того, какое хранилище вы используете. Если вы хотите переместить корневой каталог на другое устройство хранения данных, выберите точку монтирования устройства

1: Копирование файлов в новый каталог

Свежая установка Apache использует в качестве корневого каталога /var/www/html. Однако вы могли ранее создать новый document root в /var/www/example.com/html. Также у вас могут быть дополнительные корневые каталоги в соответствии с директивой VirtualHost. На этом этапе нужно установить расположение корневых каталогов и скопировать все необходимые файлы в новое место.

Сначала нужно узнать местонахождение дополнительных корневых каталогов. Чтобы сфокусировать своё внимание только на активных сайтах, ищите каталоги только сайтов из /etc/apache2/sites-enabled. С помощью флага -R команда grep вернёт DocumentRoot и имя файла:

grep -R "DocumentRoot" /etc/apache2/sites-enabled

Если вы выполнили мануалы из предварительных требований, вы получите такой результат:

/etc/apache2/sites-enabled/example.com-le-ssl.conf:  DocumentRoot /var/www/example.com/html
/etc/apache2/sites-enabled/example.com.conf:         DocumentRoot /var/www/example.com/html

Если у вас есть другие хосты, ваш результат может отличаться от этого. В любом случае, вы можете использовать grep, чтобы убедиться, что перемещаете правильные файлы и обновляете нужные конфигурации.

Выяснив расположение корневых каталогов, можно скопировать их на новое устройство с помощью rsync. Флаг –a сохраняет привилегии и другие свойства каталога. Флаг –v предоставляет подробный вывод.

Примечание: Убедитесь, что в названии каталога нет конечного слеша (система может добавить его, если вы используете автодополнение). Если такой слеш есть, rsync будет сбрасывать содержимое каталога в точку монтирования, а не в каталог.

sudo rsync -av /var/www/example.com/html /mnt/volume-nyc3-01
sending incremental file list
html/
html/index.html
sent 318 bytes  received 39 bytes  714.00 bytes/sec
total size is 176  speedup is 0.49

2: Настройка Apache

Apache  использует глобальные и индивидуальные конфигурационные файлы.

Читайте также: Настройка Apache в Ubuntu и Debian

Если вы работаете со старой установкой веб-сервера, вам нужно отредактировать все виртуальные хосты, полученные в выводе grep. В данном примере нужно откорректировать два виртуальных хоста: /etc/apache2/sites-enabled/example.com.conf и /etc/apache2/sites-enabled/example.com-le-ssl.conf (который был создан при получении сертификата).

Примечание: Помните, что example.com нужно заменить своим доменом.

Для начала откройте /etc/apache2/sites-enabled/example.com.conf:

sudo nano /etc/apache2/sites-enabled/example.com.conf

Найдите директиву DocumentRoot и укажите в ней новое расположение корневого каталога (в нашем случае /mnt/volume-nyc3-01/html).

<VirtualHost *:80>
ServerAdmin sammy@example.comn
ServerName example.com
ServerAlias www.example.com
DocumentRoot /mnt/volume-nyc3-01/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Также нужно добавить директивы, чтобы сервер мог следовать симлинкам.

. . .
<Directory /mnt/volume-nyc3-01/html>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>

Путь к корневому каталогу нужно исправить во всех конфигурационных файлах, в которых он упомянут. В старых установках могут использоваться алиасы и переопределения настроек, которые тоже нуждаются в обновлении. Проверьте все файлы, в которых команда grep нашла путь к корневому каталогу.

Сохраните изменения и приступайте к настройке SSL. Откройте /etc/apache2/sites-enabled/example.com-le-ssl.conf:

sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf

Укажите в DocumentRoot новое расположение, /mnt/volume-nyc3-01/html.

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin sammy@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /mnt/volume-nyc3-01/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
. . .
</VirtualHost>
</IfModule>

3: Перезапуск Apache

Откорректировав все настройки, проверьте синтаксис на наличие ошибок с помощью configtest:

sudo apachectl configtest

На свежей установке команда вернёт:

AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message

Syntax OK

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

Чтобы убрать из вывода первую строку, просто добавьте директиву ServerName в свой основной (глобальный) файл конфигурации Apache /etc/apache2/apache2.conf. ServerName – это домен или IP-адрес вашего сервера. В целом, это опционально, поскольку это только сообщение не влияет на функциональность сайта. Если вывод содержит строку Syntax ОК, вы можете продолжать работу.

Перезапустите веб-сервер:

sudo systemctl reload apache2

После перезапуска посетите сайты, корневые каталоги которых вы переместили на новое устройство, и убедитесь, что они работают. После этого можно удалить оригинальные каталоги.

sudo rm -Rf /var/www/example.com/html

Заключение

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

При увеличении нагрузки на сайт вы можете протестировать нагрузку веб-сервера при помощи Apache JMeter.

Читайте также:

Tags: , ,