Привет, друзья!
Эта публикация призвана пополнить копилку инструментов уникальной утилитой, которая станет ценным дополнением арсенала каждого профессионального киберниндзя. Ведь одна из главных черт ниндзя - умение выбирать и эффективно использовать множество инструментов для всех случаев жизни.
Итак, знакомьтесь - 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. Если она понравилась вам, то возможно понравится и этот движок. У меня как-раз есть небольшой пошаговый гайд по нему.
Буду рад ответить на вопросы или помочь составить дополнительные рецепты.