确保 nginx 主进程保持 运行

Ensure nginx master process stays running

我目前正在尝试使用 ubuntu:14.04 作为我的基本映像设置一个 docker 容器,其中包含 nginx 和 gunicorn/django/celery 运行。我正在使用 supervisor 启动所有进程,并进行了测试以确保 gunicorn 在出现故障时重新启动。但是,我不知道如何用 nginx 做到这一点。

我的nginx supervisord.conf 如下:

[program:nginx]
command=nginx
autorestart=false

我将 autorestart 设置为 false,因为据我所知,nginx 命令只是启动主进程和工作进程,然后以状态码 0 退出。如果我将 autorestart 设置为 true,它只会保持尝试重新启动该 nginx 命令,后续重试将失败,因为 master/worker 进程已经 运行 并绑定到端口。

从表面上看,这似乎没问题,因为如果我尝试杀死一个工作进程,master 将启动另一个工作进程来代替它。但是我如何确保主进程也保持 运行?

您需要将 daemon off; 附加到您的 nginx.conf 配置中,以指示 nginx 在前台 运行。

然后将您的主管节修改为:

[program:nginx]
command=nginx
autorestart=true

它仍然会产生 master/worker processes/subprocesses 并且可以在生产设置中以这种方式使用。在这种情况下,主管 运行 在后台控制和监督进程。

看到这个FAQ entry