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 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 伺服器上感覺很愚蠢。

UTC 時間 9:56 更新:使用 進行測試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;

相關內容