Nginx. Виртуальные хосты в режиме эксперта
Статья — продолжение Nginx. Работа с виртуальными хостами. Если вы только настраиваете первый сайт — начните оттуда: создание хоста в режиме конструктора покрывает большинство случаев. Сюда переходите, когда нужны директивы, которых нет в форме: кастомный try_files, проксирование, специфичные параметры FastCGI, rate-limiting. Здесь — как открыть режим эксперта, как переключаться между режимами без потери настроек, разбор стартового шаблона и подключение PHP-FPM вручную.
Когда нужен режим эксперта
Режим эксперта нужен, когда стандартной формы не хватает. Типовые случаи:
- кастомный
try_files— например, для SPA сtry_files $uri $uri/ /index.html;или WordPress сtry_files $uri $uri/ /index.php?$args;; - нестандартные
access_log/error_log— свой формат, путь или отключение логов; proxy_passна upstream-сервис с тонкой настройкой заголовков и таймаутов;- дополнительные
fastcgi_paramповерх стандартного PHP-FPM-блока; - rate-limiting, кеш, gzip-настройки;
- директивы
if,map,set.
Для типовых сайтов — статика, WordPress на готовом стеке, базовый reverse-proxy — режим эксперта не нужен. Используйте режим конструктора.
Открытие режима эксперта
- В боковом меню раздела Nginx нажмите «Создать виртуальный хост».
- Откроется страница создания в режиме конструктора. В нижней панели нажмите «В режим эксперта».
- Появится диалог «Переключение в режим эксперта». Нажмите «Продолжить».
- Откроется редактор исходного конфига с подсветкой синтаксиса и стартовым шаблоном.
- Заполните поле «Доменное имя» над редактором — это имя виртуального хоста, по нему панель сохраняет конфигурацию. Адаптируйте шаблон под свой сайт.
- Нажмите «Создать».
⚠️ Переключение режимов в форме создания
Возврат в конструктор — по кнопке «В режим конструктора» в той же нижней панели. В форме создания работает так:
- При первом переходе в эксперт открывается стартовый шаблон (см. ниже).
- При обратном переключении в конструктор поля формы возвращаются — введённые в конструкторе значения сохраняются.
- При повторном переходе в эксперт промежуточный черновик не сохраняется и перезаписывается тем же стартовым шаблоном.
Если вы редактировали исходный конфиг в эксперте, переключились в конструктор и вернулись назад — правки потеряются. Сохраните конфиг кнопкой «Создать» до переключения, либо скопируйте текст в сторонний редактор.
Стартовый шаблон
# This configuration file is automatically generated by BeAdmin.
# You can modify it according to your needs.
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;
}Что делает каждая директива:
listen 80;— порт. Для HTTPS поменяйте на443 ssl;и добавьтеssl_certificateиssl_certificate_key. В режиме эксперта панель не выпускает сертификат автоматически при сохранении хоста — выпустите его вручную после создания, как описано в статье Выпуск SSL-сертификата.server_name example.com www.example.com;— домены, на которые отвечает блок. Связан с полем «Доменное имя» над редактором (см. ниже).root /var/www/example.com/public;— корень файлов сайта. Заменитеexample.comна свой домен. Каталог должен существовать и быть доступным пользователюnginx, иначе сайт ответит 403 или 500.index index.php index.html;— файлы по умолчанию для запроса каталога. Порядок важен: для PHP-сайта первым указывайтеindex.php.location / { try_files $uri $uri/ =404; }— стандартная схема: ищем файл по точному пути, затем каталог, иначе 404. Для SPA замените=404на/index.html. Для WordPress — на/index.php?$args.access_logиerror_log— пути к логам. Удобно держать их в/var/log/nginx/<домен>.access.logи/var/log/nginx/<домен>.error.log— так настроены логи, которые показывает модуль Nginx в панели.
⚠️ Подстановка домена в server_name
Когда поле «Доменное имя» становится непустым в первый раз после открытия редактора в форме создания, панель один раз подставляет в server_name стартового шаблона значение <домен> www.<домен> — например, example.com www.example.com. После этого поле «Доменное имя» и строка server_name не синхронизируются: управляйте server_name вручную в редакторе. На странице существующего хоста подстановка не выполняется.
⚠️ Валидация server_name при сохранении
При нажатии «Создать» панель проверяет, что каждое значение в server_name оканчивается на то, что введено в поле «Доменное имя». Если в поле — example.com, то example.com, www.example.com, api.example.com валидны, а api.other.com — нет, и сохранить хост не получится.
Подключение PHP через PHP-FPM
В стартовом шаблоне PHP не подключён: index.php есть в директиве index, но без обработчика .php сервер вернёт исходник как обычный текст. Чтобы сайт исполнял PHP-скрипты, нужен блок location ~ \.php$ { ... } с передачей запросов в PHP-FPM-сокет.
Модуль PHP в BeAdmin поддерживает несколько версий параллельно. Каждая создаёт свой сокет /var/run/php/php<версия>-fpm.sock — например, php8.3-fpm.sock. Версию для конкретного сайта посмотрите в модуле PHP и подставьте в fastcgi_pass.
В стандартной установке через BeAdmin Nginx ставится из официального репозитория nginx.org. Готового фрагмента /etc/nginx/snippets/fastcgi-php.conf в нём нет — он поставляется только в пакетах nginx-full и nginx-extras из родных репозиториев Debian и Ubuntu. Поэтому рекомендуемый вариант — прописать параметры FastCGI явно:
location ~ \.php$ {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}Если на сервере Nginx установлен из дистрибутивных пакетов и стандартный фрагмент присутствует — можно подключить готовый:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}Сохранение и применение
После нажатия «Создать»:
BeAdminсохраняет конфиг и активирует виртуальный хост.- Если файлы сайта уже лежат в каталоге
root— сайт сразу доступен. - Перед активацией панель проверяет конфиг командой
nginx -t. При синтаксической ошибке или неизвестной директиве хост не создаётся, и панель показывает уведомление: «Не удалось создать виртуальный хост из-за ошибки в конфигурации. Дополнительная информация доступна в логах.» Конкретные строки ошибкиnginx -tсмотрите в системных логах модуля Nginx, исправьте конфиг и нажмите «Создать» повторно.
Управление существующим хостом
- Чтобы открыть исходный конфиг существующего хоста, на его странице нажмите в нижней панели «В режим эксперта». Возврат — по кнопке «В режим конструктора».
- Конфиги двух режимов хранятся по-разному: конфиг конструктора — это структурированный набор полей формы в БД панели, конфиг режима эксперта — исходный файл на диске. При переключении из режима эксперта в конструктор панель сохраняет текущий исходный файл во внутренний бэкап, а конструктор показывает свой последний сохранённый набор полей.
- Промежуточный черновик в режиме эксперта панель не помнит: каждый возврат в эксперт подтягивает актуальный конфиг с сервера. Если вы редактировали исходный конфиг, переключились в конструктор и вернулись назад, не нажав «Сохранить», — правки потеряются, в редакторе откроется последняя сохранённая на сервере версия.
- Удалить хост можно из бокового меню — иконкой корзины рядом с его именем. Удаляются файл конфигурации виртуального хоста и его логи; файлы сайта в каталоге
rootи SSL-сертификаты остаются на сервере.
Полезные ссылки
- Nginx. Работа с виртуальными хостами — создание виртуального хоста в режиме конструктора, описание полей формы.
- Nginx. Быстрый старт — установка модуля и поднятие первого сайта.
- Как развернуть PHP-сайт на Nginx, PHP и MySQL — пошаговый сценарий с реальной CMS.
- Выпуск SSL-сертификата — ручной выпуск Let's Encrypt в режиме эксперта.
- Решение ошибок ACME при выпуске SSL-сертификата — для HTTPS-хостов.
- Официальная документация Nginx — справочник по директивам и модулям.