Nginx
nginx error_log 報告“bind() to 0.0.0.0:80 failed (48: Address already in use)”
我最近在 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之間的區別就是區別,但我無法找到各種錯誤的任何描述。