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スタイルの init がそれを制御していない) の場合に当てはまります。これにより、デーモン化されず、制御が systemd に戻されるという効果がありましたnginx-> 「不明な問題でタイムアウトしました」として扱われ、プロセスsystemdが強制終了されます。

結局、これは単純な設定エラーでした。同じようにこの不器用なミスを犯した他の人の役に立つかもしれないので、ここに投稿したいと思いました。:-)

このキーワードに関する詳細情報:http://nginx.org/en/docs/ngx_core_module.html#デーモン

答え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;

関連情報