Go to content Go to menu Go to search

Nginx под Windows как сервис

Введение

Nginx сам по себе не поддерживает работу как сервис. Более, того, при запуске он запускает дочерний процесс, который обслуживает соединения, а родительский процесс служит для управления. Для того, что бы остановить nginx нужно запустить его с ключем -s stop, тогда родительский процесс прибьет дочерние и корректно завершится.

Если установить nginx как сервис стандартными средствами, то при попытке остановить сервис винда тупо убивает родительский процесс, в результате дочерние процессы продолжают существовать.

Для того, что бы решить эту проблему написан wrapper, которому можно указать как корректно завершать процессы. называется сие чудо Windows Service Wrapper.

Установка Nginx как сервис

1). Скачиваем и распаковываем Nginx. Например в папку D:/nginx Скачивать тут (за одно полезно почитать эту страницу): Nginx под Windows

2). Скачиваем Windows Service Wrapper https://github.com/kohsuke/winsw

3). Копируем winsw в папку, куда распаковали nginx и переименовываем в D:\nginx\nginx_svc.exe

4). Создаем конфиг D:\nginx\nginx_svc.xml

<service>
        <id>nginx</id>
        <name>nginx</name>
        <description>HTTP-Server nginx</description>
        <executable>d:\nginx\nginx.exe</executable>
        <logpath>d:\nginx\logs</logpath>
        <logmode>roll</logmode>
        <depend></depend>
        <startargument>-p</startargument>
        <startargument>d:\nginx</startargument>
        <stopargument>-p</stopargument>
        <stopargument>d:\nginx</stopargument>
        <stopargument>-s</stopargument>
        <stopargument>stop</stopargument>
</service>

Устанавливаем сервис

nginx_svc.exe install

Управление nginx под Linux

Запустить:

start nginx

Управление:

nginx -s stop : быстрое завершение
nginx -s quit : плавное завершение
nginx -s reload : изменение конфигурации, запуск новых рабочих процессов с новой конфигурацией, плавное завершение старых рабочих процессов
nginx -s reopen : переоткрытие лог-файлов
nginx -t : проверка конфига на ошибки

Чтобы увидеть процессы nginx, запустите утилиту командной строки tasklist:

tasklist /fi "imagename eq nginx.exe"

Прочие косяки Nginx под windows

Проблема

По умолчанию длина имени виртуального хоста 32 символа. если у вас имя хоста длиньше, то получите ошибку:

could not build the server_names_hash, you should increase server_names_hash_bucet_size: 32

Решение:

В nginx.conf в секции http{} добавить директиву:

server_names_hash_bucket_size 128;

Enjoy!


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved