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!