nginx 启动超时

nginx 启动超时

我已经nginx使用此条sources.list.d目进行了安装:

deb http://nginx.org/packages/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/ubuntu/ xenial nginx

nginx 版本为1.12.2-1~xenial。服务器运行的是 Ubuntu 16.04 LTS,内核为4.4.0-36-generic

我的问题是nginx守护进程无法启动:

$ sudo systemctl start nginx
Job for nginx.service failed because a timeout was exceeded. See "systemctl status nginx.service" and "journalctl -xe" for details.

不幸的是,这些日志没有提供太多信息:

$ sudo journalctl -xe
Feb 05 10:43:50 SERVERNAME nginx[17035]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Feb 05 10:43:50 SERVERNAME nginx[17035]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Feb 05 10:45:21 SERVERNAME systemd[1]: nginx.service: Start operation timed out. Terminating.
Feb 05 10:45:21 SERVERNAME systemd[1]: Failed to start nginx - high performance web server.
-- Subject: Unit nginx.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit nginx.service has failed.
--
-- The result is failed.
Feb 05 10:45:21 SERVERNAME systemd[1]: nginx.service: Unit entered failed state.
Feb 05 10:45:21 SERVERNAME systemd[1]: nginx.service: Failed with result 'timeout'.

据我所知,nginx 确实启动正确。问题似乎出在父进程没有收到来自其子进程的“我已启动”消息。当它正在运行时(systemd 等待它启动),我可以像这样成功地 curl 它:

$ curl http://localhost:8000
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.12.2</center>
</body>
</html>

我对此感到迷茫,除了测试另一个nginx版本或其他什么。有什么想法吗?我可以重新启动服务器,但在 Linux 服务器上这样做感觉很愚蠢。

更新 9:56 UTC:已测试1.13.8-1~xenial,同样的问题。

答案1

我最终发现了这个问题,这是一个愚蠢的问题......

nginx我通过复制 Docker 容器中的设置来开始配置,该容器的nginx配置中有以下设置:

daemon off;

这在 Docker 场景中是正确的(其中进程nginx正在运行runit,即没有systemd-style init 控制它。)它具有nginx永远不会守护进程的效果,并将控制权返回给 systemd -> 它将被视为“由于未知问题而超时”,并将systemd其杀死。

所以,这最终只是一个简单的配置错误。我想把它发布在这里,因为它可能会帮助其他犯这种笨拙错误的人。:-)

关于此关键字的完整详细信息:http://nginx.org/en/docs/ngx_core_module.html#daemon

答案2

nginx.conf 中 pid 本地化的自定义设置也可能存在问题:

pid../logs/nginx.pid;

它必须与 nginx.service 文件(/lib/systemd/system/nginx.service)中的 PIDFile 设置一致:PIDFile=/var/run/nginx.pid

这里不是;]

答案3

将 nginx 配置复制到 openresty 时也会发生这种情况。我在配置中写了这行,但 openresty 无法作为服务启动:

pid /run/nginx.pid;

相关内容