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

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

Данный мануал научит вас перемещать корневой каталог Nginx.

Требования

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

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

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

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

grep -R "root" /etc/nginx/sites-enabled

На свежей установке сервера вывод будет примерно такой:

/etc/nginx/sites-enabled/example.com:           root /var/www/example.com/html;
/etc/nginx/sites-enabled/default:               root /var/www/html;
/etc/nginx/sites-enabled/default:               # deny access to .htaccess files, if Apache's document root
/etc/nginx/sites-enabled/default:#              root /var/www/example.com;

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

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

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

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

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

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

Читайте также: Настройка веб-сервера Nginx

Если вы работаете со старой установкой веб-сервера, вам нужно отредактировать все файлы, полученные в выводе grep. В данном примере рассмотрим виртуальный хост проекта example.com.

sudo nano /etc/nginx/sites-enabled/example.com

Найдите директиву root и укажите в ней новое расположение корневого каталога.

server {
root /mnt/volume-nyc3-01/html;
index index.html index.htm index.nginx-debian.html;
. . .
}
. . .

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

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

Проверьте синтаксис на наличие ошибок с помощью команды:

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

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

sudo systemctl restart nginx

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

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

Заключение

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

Чтобы улучшить производительность сайта с высокой нагрузкой, читайте статьи:

Tags: , ,