Найти в Дзене
КиберНиндзя

Mechanic: мгновенная настройка Nginx без правки конфигов!

Привет, друзья!

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

Итак, знакомьтесь - Mechanic. Спецсредство для мгновенной настройки Nginx без необходимости лезть в конфиг-файлы. Она особенно полезна при управлении целым зоопарком сайтов на одном сервере без веб-панели, или же когда требуется быстро поднять какую-либо специфическую конфигурацию. Но также она подойдет и начинающим админам, которые еще не постигли дзен Nginx-а, а сайт нужно запускать здесь и сейчас.

Эта утилита написана на языке Javascript и входит экосистему NodeJS, поэтому если она еще не установлена, установите ее следующей командой.

Debian-based (Ubuntu, Debian etc.):

sudo apt install nodejs npm

Centos:

sudo yum install -y gcc-c++ make
sudo curl -sL https://rpm.nodesource.com/setup_12.x | sudo -E bash -
sudo yum install nodejs

Теперь можно установить Mechanic:

npm install -g mechanic

Инструмент у вас в кармане. Разберем его возможности.

Для начала немного справочной теории, а в конце статьи - готовые рецепты для типовых сайтов.

У него всего 4 основных часто используемых команды:

  • sudo mechanic add название_сайта - добавить конфигурацию сайта
  • sudo mechanic update название_сайта - изменить конфигурацию сайта
  • sudo mechanic remove название_сайта - удалить конфигурацию сайта
  • sudo mechanic list - показать список заведенных конфигураций

Команды add и update принимают дополнительные аргументы в формате "--аргумент=значение", задающие, как именно нужно настроить сайт.

Список наиболее полезных:

  • --host=domain.com - установить в качестве основного домена domain.com, может быть только один.
  • --aliases=www.domain.com,othersite.com - алиасы через запятую (дополнительные домены и поддомены).
  • --canonical=true|false - при установке этого аргумента со всех алиасов будет установлен редирект на основной host.
  • --default=true|false - установить данный сайт дефолтным (т.е. любые обращения к серверу без указания домена будут адресоваться на него). Внимание! Перед установкой данной опции нужно вручную удалить дефолтную запись сайта, если она еще есть (как правило это /etc/nginx/sites-enabled/default).
  • --static=/корневой/путь/до/статики - путь до корневой папки, где лежит вся статика сайта (если используются CMS вроде WP/Joomla/Drupal - корень сайта).
  • --autoindex=true|false - если не используется бэкенд и проксирование не нужно, этот аргумент в значении true при запросах без указании имени файла (оканчивающихся на /) будет искать файл index.html. Т.е. применяется для статических сайтов.
  • --backends=порт - номер порта бэкенда, на который проксировать не статические запросы (для Apache обычно 8080, для NodeJS - 3000). Можно указывать несколько портов через запятую, или даже IP адреса - в этом случае nginx будет работать в роли балансировщика нагрузки.
  • --https-upstream=true|false - активирует обмен с бэкендом через SSL в значении true.
  • --https=true|false - активирует SSL для сайта. Предварительно нужно залить сертификат и ключ в папку /etc/nginx/certs/, назвав их соответственно название_сайта.cer и название_сайта.key
  • --redirect-to-https=true|false - принудительный редирект на https.
  • --redirect=https://другойсайт.com - редиректить все запросы на фиксированный адрес https://другойсайт.com
  • --redirect-full=https://другойсайт.com - аналогично предыдущему, но будет редирект не на фиксированную ссылку, а с передачей пути, напр. domain.com/page/1/ редиректит на другойсайт.com/page/1/.

Теперь, как и обещал, несколько готовых рецептов.

Простой статический сайт:

sudo mechanic add my_site --host=domain.com --aliases=www.domain.com --static=/корневой/путь/до/статики --autoindex=true --canonical=true

Простой статический сайт с SSL-сертификатом (https):

sudo mechanic add my_site --host=domain.com --aliases=www.domain.com --static=/корневой/путь/до/статики --autoindex=true --canonical=true --https=true --redirect-to-https=true

Динамический сайт:

sudo mechanic add my_site --host=domain.com --aliases=www.domain.com --canonical=true --static=/корневой/путь/до/статики --backends=порт

Перевод существующего http-сайта my_site на https (сертификат и ключ предварительно должны быть размещены в /etc/nginx/certs/my_site.cer и /etc/nginx/certs/my_site.key):

sudo mechanic update my_site --https=true --redirect-to-https=true

Добавление дополнительных поддоменов для существующего сайта my_site:

sudo mechanic update my_site --canonical=false --aliases=www.domain.com,sub1.domain.com,sub2.domain.com

Как видите, все предельно просто и быстро. Буквально одной командой поднимается статический сайт, прокси к бэкенду или даже балансировщик. И также быстро одной командой вносятся изменения.

Помимо описанного, mechanic имеет еще несколько более узкоспециализированных команд. При желании ознакомиться с ними вы можете на его странице:

https://www.npmjs.com/package/mechanic

Кстати, эта утилита от создателей не менее интересного и удобного, полнофункционального движка для сайт ApostropheCMS. Если она понравилась вам, то возможно понравится и этот движок. У меня как-раз есть небольшой пошаговый гайд по нему.

Буду рад ответить на вопросы или помочь составить дополнительные рецепты.