無法讓 Nginx 在連接埠 80 上工作。

無法讓 Nginx 在連接埠 80 上工作。

我剛剛在 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

ps說 Nginx 正在運行,但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。檢查這一點的方法是lsof在您的系統上像這樣運行:

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

這將嚴格顯示哪些進程可能正在使用連接埠 80。

sudo lsof -i -P

如果您只想檢查連接埠 80 是否正在使用,您可以使用該lsof命令的這種變體,該命令允許檢查這些內容,而無需使用以下命令過濾輸出grep

sudo lsof -nPL -iTCP:80

答案3

在基於 Unix 的系統上,例如 MacOS,如果沒有超級使用者權限,則無法在低於 1024 的連接埠上執行服務。但是當你重新啟動電腦時,nginx服務會以超級用戶自動重新啟動,因此它可以工作。

以下命令應該可以解決該問題:

sudo brew services restart nginx

答案4

我解決了這個問題(我有一個帶有 M1 晶片的 MacBook Air):

  1. 刪除 httpd(如果有)
  2. 禁用阿帕契關聯
  3. 安裝nginx
  4. 將連接埠更改為 80/usr/local/etc/nginx/nginx.conf

相關內容