Задать вопрос
@BloodVIRUS

Как через php перезагрузить nginx?

Здравствуйте. Продолжаю биться за возможность подключение пользователями своих доменов (и подключения к ним https). Смирился с тем, что единым конфигом мне не обойтись (как было в моем предыдущем вопросе), и абсолютно для каждого сайта нужно создать свой собственный конфиг.
Но вопрос, как можно из php скрипта перезапустить NGINX? exec не срабатывает, да и не хочется его использовать. Думается мне это крайне не безопасно.
А какие еще варианты могут существовать?
Вот искал бы он конфиги на лету, без перезагрузки..
  • Вопрос задан
  • 2197 просмотров
Подписаться 2 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 6
inoise
@inoise Куратор тега PHP
Solution Architect, AWS Certified, Serverless
Не занимайтесь фигнёй. Есть такая замечательная вещь как IaC (Infrastructure as Code). Инструментов под это куча, а обращение к этому уже можно делать через php ибо эти инструменты имеют свой API. Подготавливаете конфигурации, обновляете их на php и перезапускаете развертывание. Все счастливы
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
ну, вариантов есть много, вот например:
Создаете из пыха файл restart.ngx когда нужно перегрузить сервер, из крона каждую минуту дергаете баш скрипт перезагрузки сервера если файл есть + стираете файл. Физически пых никак при этом не дергает систему.
Вопросы устойчивости системы и прочие "безопасности" смотрите по месту.
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега PHP
♬♬
Можно просто по крону раз в 15 минут делать не перезагрузку самого nginx, а только перечитку конфигов.

в кронтабе для root, с проверкой корректности конфигов:
15 0 0 0 0  nginx -t  &&  nginx -s reload > /dev/null 2>&1


Ещё лучше сделать bash-скрипт, где в случае непрохождения теста конфигов, отправлять письмо с восклицаниями.
Ответ написан
Комментировать
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
Предлагаю вам смотреть в сторону inotify и похожих штук. Но вообще - в рамках одного веб-сервера это проблематично, поскольку если появится кривота хотя бы у одного клиента - нгинкс не поднимется. Соответственно, нужна верификация с последующим откатом.

Намного логичнее предоставить каждому пользователю свой экземпляр веб-сервера.
Ответ написан
Комментировать
Supme
@Supme
Просто системный администратор
При изменениях пишем файл в спец каталог. Подписка на событие файловой системы на изменение каталога. По изменению- nginx -t и в случае факапа отправка мэссэджа всем причастным, в случае хорошего завершения релоад энджи, именно релоад, а не рестарт.
Ответ написан
kotomyava
@kotomyava
Системный администратор
Проанализируйте, как работают и как сделаны панели управления хостингом, прежде чем делать собственный велосипед с квадратными колёсами.

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

Войдите, чтобы написать ответ

Похожие вопросы