エンジニア - OS関連 - [nginx] システム起動時に、自動起動に失敗する
キーワード
Alma Linux / CentOS / Red Hat / nginx / リバースプロキシ
概要
systemctl enable nginx
としているのに、サーバーの再起動だけだとnginxが上がってこない
原因を調べるためにコンソールに入り、
systemctl status nginx
とうつと、下記のような文言が出る
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor prese>
Active: failed (Result: exit-code) since Tue 2025-06-03 10:08:18 JST; 25min >
Process: 956 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=1/FAILURE)
Process: 950 ExecStartPre=/usr/bin/rm -f /ext/var/run/nginx.pid (code=exited,>
6月 03 10:08:18 prdw.inet.jp systemd[1]: Starting The nginx HTTP and reverse p>
6月 03 10:08:18 prdw.inet.jp nginx[956]: nginx: [emerg] host not found in upst>
6月 03 10:08:18 prdw.inet.jp nginx[956]: nginx: configuration file /etc/nginx/>
6月 03 10:08:18 prdw.inet.jp systemd[1]: nginx.service: Control process exited>
6月 03 10:08:18 prdw.inet.jp systemd[1]: nginx.service: Failed with result 'ex>
6月 03 10:08:18 prdw.inet.jp systemd[1]: Failed to start The nginx HTTP and re
※環境により表示が異なることを留意
systemctl restart nginx
を行うと、nginxは正常に起動し、以後稼働を始める
原因
nginx においてリバースプロキシ
(別ホストへの転送)を実装している場合に起こる
重要なのは下記文言
6月 03 10:08:18 prdw.inet.jp nginx[956]: nginx: [emerg] host not found in upst>
host not found
という訴えは、DNSによりホスト名が解決できなかったことにある
DNSサーバーへ疎通もできるのにこれが出る場合、サービスの起動順に問題がある
対処
サービス (/usr/lib/systemd/system/nginx.service など、環境により異なる) の中に、下記を追記
[Unit]
After=network-online.target
Wants=network-online.target
理屈 : network.target では不足か?
仮に下記が既にあったとする
After=network.target
これによりネットワークが起動後とサービスが立ち上がりそうなものだが、
network.target
というのは「ネットワークインタフェースが存在する状態」までを示し、オンラインになったかどうかを示さないとのこと
理屈:Afterだけでは不足か
After は起動順序を制御するので、必須である
Wants はそのサービスが起動するときに、同時に起動する対象として指定する
つまり、Afterだけだと、起動は待つものの、もし他サービスによってそれが起動しない場合に、
最終的に起動に失敗してしまう
そこで、Wants を指定することでサービス起動時に合わせて起動してしまう
理屈:Wantsだけでは不足か
Wants は並行して起動するよう指示はするが、起動を待つ指定ではない
起動順序を問う場合は、After にも指定が必要となる