ポート 80 で Nginx を動作させることができません。他のポートでは問題なく動作します。

ポート 80 で Nginx を動作させることができません。他のポートでは問題なく動作します。

Mac OS X 10.11 (El Capitan) に Homebrew の Nginx をセットアップしました。

Ngnix 設定を次のように設定した場合:

listen      127.0.0.1:8080;

listen      127.0.0.1:81;

listen      127.0.0.1:75;

動作します。ただし、これをそこに入れた場合は:

listen      127.0.0.1:80;

それは無理。行くと接続拒否されるhttp://127.0.0.1

psNginx は実行中であると表示されますが、実行されていないnetstat -a | grep nginxと表示されます。netstat -a | grep 80

もちろん、これをrootとして実行します(ただし、:8080

そして、Mac OS X ファイアウォールは実行されていません。

エラー ログには、次のメッセージは表示されなくなりました:

2015/10/10 17:16:19 [emerg] 23906#0: bind() to 0.0.0.0:80 failed (48: Address already in use)

何かアイデアはありますか? これを で実行することで動作します8080(興味深いことに、 で実行すると8080、ポートが開かれ80、 にリダイレクトされます80)。

答え1

OSX を再起動しました。うまくいきました。Linux の場合は違うと思います。

答え2

エラーは次のとおりです:

2015/10/10 17:16:19 [emerg] 23906#0: bind() to 0.0.0.0:80 failed (48: Address already in use)

「アドレスは既に使用されています」というメッセージは、システム上の他の何かがポート 80 を使用していることを物語っています。Web 共有が有効になっていますか、それとも Apache がインストールされて実行されていますか? これを確認するには、lsofシステムで次のように実行します。

sudo lsof -i -P | grep -i "80"

これにより、ポート 80 を使用しているプロセスが正確に表示されます。Mac OS X システムで「リッスン」するように設定されている他のポートを確認したい場合は、次のコマンドを実行してください。

sudo lsof -i -P

lsofポート 80 が使用されているかどうかだけを確認したい場合は、次のコマンドを使用して出力をフィルタリングせずに確認できるコマンドのバリエーションを使用できますgrep

sudo lsof -nPL -iTCP:80

答え3

MacOS のような Unix ベースのシステムでは、スーパーユーザー権限がないと 1024 未満のポートでサービスを実行することはできません。ただし、コンピューターを再起動すると、nginx サービスはスーパーユーザー権限で自動的に再起動されるため、正常に動作します。

次のコマンドで問題は解決するはずです。

sudo brew services restart nginx

答え4

私はこの問題を解決しました(M1チップを搭載したMacBook Airを使用しています)。

  1. httpd を削除します(ある場合)
  2. Apacheを無効にするリンク
  3. nginxをインストールする
  4. ポートを80に変更/usr/local/etc/nginx/nginx.conf

関連情報