テスト用に新しい仮想マシンを特別に作成しました。この仮想マシンには、a.a.a.a と b.b.b.b の 2 つの IP があります。nginx が a.a.a.a:80 のみをリッスンすることを願っています。
ただし、指定されたリスニング IP listen a.a.a.a:80;
が構成ファイルに設定されてシステムが再起動されると、nginx は起動に失敗し、エラー Starting nginx: [emerg]: binding を報告します。 () to a.a.a.a failed (99: Cannot assign requested address)
となりますが、この時は手動で systemctl start nginx
を実行すれば正常に起動できます。
構成ファイル内の IP listen 80;
を削除してシステムを再起動すると、nginx が正常に起動できるようになります。
要約:
リスニングIPを指定した後、システムでサービスを自動的に開始することはできませんが、手動でサービスを開始して正常に使用できます。
リスニング IP を指定しない場合、サービスはシステムによって自動的に開始され、正常に動作します。
この状況を解決するにはどうすればよいですか?
一時的な解決策については、この投稿のコメントを参照してください (デフォルトでは展開されていません)
推測される理由は、nginx がバインドする IP を検出する必要があるが、システムが検出時に値を返さないか、検出時間が速すぎるため、システムがバインドを許可しないことです。詳細についてはマスターが追加するまでお待ちください
nginx を起動するユーザーが root ユーザーであるかどうかを確認します。デフォルトでは、ポート 80 は root のみが占有できます。また、一般のユーザーがポート 80 を占有できるように、関連する設定を変更する必要があります。