Nginx

nginx error_log 報告“bind() to 0.0.0.0:80 failed (48: Address already in use)”

  • July 23, 2020

我最近在 OS X 10.9 Mavericks 上通過 MacPorts 安裝了 nginx 和 PHP-FPM,儘管它可以正常工作,但我的主要 error_log 連續顯示埠 80 正在使用中。

2013/10/25 11:27:36 [emerg] 4510#0: bind() to 0.0.0.0:80 failed (48: Address already in use)
2013/10/25 11:27:36 [notice] 4510#0: try again to bind() after 500ms
2013/10/25 11:27:36 [emerg] 4510#0: bind() to 0.0.0.0:80 failed (48: Address already in use)
2013/10/25 11:27:36 [notice] 4510#0: try again to bind() after 500ms
2013/10/25 11:27:36 [emerg] 4510#0: bind() to 0.0.0.0:80 failed (48: Address already in use)
2013/10/25 11:27:36 [notice] 4510#0: try again to bind() after 500ms
2013/10/25 11:27:36 [emerg] 4510#0: bind() to 0.0.0.0:80 failed (48: Address already in use)
2013/10/25 11:27:36 [notice] 4510#0: try again to bind() after 500ms
2013/10/25 11:27:36 [emerg] 4510#0: bind() to 0.0.0.0:80 failed (48: Address already in use)
2013/10/25 11:27:36 [notice] 4510#0: try again to bind() after 500ms
2013/10/25 11:27:36 [emerg] 4510#0: still could not bind()

我沒有驗證其他任何東西,例如 Apache 正在使用埠 80。

在搜尋解決方案時,有幾個地方(例如這個)說解決方案是刪除/註釋掉listen預設主機中的指令行。

#listen       80 default_server;

這樣做對我沒有任何改變,主要的 error_log 繼續填滿。

最後有人在nginx 論壇解決了類似的問題,建議查看輸出

ps ax -o pid,ppid,%cpu,vsz,wchan,command|egrep '(nginx|PID)'

對我來說是

 PID  PPID  %CPU      VSZ WCHAN  COMMAND
4963     1   0.0  2504128 -      /opt/local/bin/daemondo --label=nginx --start-cmd /opt/local/sbin/nginx ; --pid=fileauto --pidfile /opt/local/var/run/nginx/nginx.pid
4967     1   0.0  2475388 -      nginx: master process /opt/local/sbin/nginx
4969  4967   0.0  2476412 -      nginx: worker process
5024  1538   0.0  2432784 -      egrep (nginx|PID)
1969  1874   0.0  2432772 -      tail -F /opt/local/etc/nginx/logs/error.log

我注意到在第一行中,pidfile 位置是在 MacPorts 的啟動命令中設置的,--pidfile /opt/local/var/run/nginx/nginx.pid並且它與我在nginx.conf. 我將pid條目改回以匹配啟動命令指定的內容:

pid        /opt/local/var/run/nginx/nginx.pid;

重新啟動 nginx 並跟踪 error_log ( tail -F /opt/local/etc/nginx/logs/error.log) 後,我注意到問題已解決。

簡而言之:如果您使用的是 MacPorts 版本的 nginx,您可能不想更改 pidfile 的位置。

順便說一句,如果您查看其他試圖解決此問題的頁面,特別是通過刪除listen指令解決問題的頁面,或者 Apache 之類的其他東西也使用埠 80,您會注意到這些錯誤日誌說

[emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

我的有

[emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)

我懷疑錯誤98和錯誤48之間的區別就是區別,但我無法找到各種錯誤的任何描述。

引用自:https://serverfault.com/questions/548740