Apache FCGI PHP-FPM Mac OS X 10.8 無法綁定
所以我發現了一些 關於這類問題的其他執行緒,但他們的解決方案對我不起作用。
基本上,這是我的開發機器,設置已經好幾個星期了,但突然之間我遇到了很多關於這些錯誤的問題:
[Thu Sep 27 16:28:43 2012] [error] [client 127.0.0.1] FastCGI: comm with server "/Library/WebServer/Documents/php5.external" aborted: idle timeout (60 sec) [Thu Sep 27 16:28:43 2012] [error] [client 127.0.0.1] FastCGI: incomplete headers (0 bytes) received from server "/Library/WebServer/Documents/php5.external"
我沒有更改與伺服器配置相關的任何內容。顯然有些事情必須改變,或者我只是變得不走運..
設置如下:
Apache/2.2.22 (Unix) DAV/2 mod_fastcgi/2.4.6 mod_ssl/2.2.22 OpenSSL/0.9.8r $ php-fpm -v PHP 5.3.15 (fpm-fcgi) (built: Aug 19 2012 09:06:12) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans $ sudo lsof -i TCP:9000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME php-fpm 97167 _www 6u IPv4 0xd65451f140772337 0t0 TCP localhost:cslistener (LISTEN) php-fpm 97174 _www 0u IPv4 0xd65451f140772337 0t0 TCP localhost:cslistener (LISTEN) php-fpm 97174 _www 3u IPv4 0xd65451f14739c337 0t0 TCP localhost:cslistener->localhost:54750 (CLOSE_WAIT) $ tail -16 /etc/apache2/httpd.conf <IfModule mod_fastcgi.c> FastCGIExternalServer /Library/WebServer/Documents/php5.external -flush -host 127.0.0.1:9000 -idle-timeout 60 AddHandler php5-fcgi .php Action php5-fcgi /usr/lib/cgi-bin/php5.external Alias /usr/lib/cgi-bin/ /Library/WebServer/Documents/ <Directory /usr/local/sbin> Options ExecCGI FollowSymLinks SetHandler fastcgi-script Order allow,deny Allow from all AllowOverride All </Directory> </IfModule>
它幾乎是一個預設的 php-fpm.conf,日誌位置發生了變化,按需程序管理器,pm.max_children = 1,其他一切都是預設的。
我已經嘗試了幾十次重新啟動 apache,並以不同的順序殺死所有 php-fpm 程序。
任何建議都將受到極大的鼓勵、歡迎、讚賞、嘗試和希望。
2012 年 9 月 28 日更新
好的,所以我使用本教程並嘗試了套接字方法來查看它是否是 TCP 埠衝突 - 結果不是。使用套接字也無助於每 10 秒的錯誤消息,如下所示:
對於 TCP:
[28-Sep-2012 08:44:58] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48) [28-Sep-2012 08:44:58] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48) [28-Sep-2012 08:44:58] ERROR: FPM initialization failed [28-Sep-2012 08:44:58] ERROR: FPM initialization failed
對於插座:
[28-Sep-2012 08:48:32] ERROR: An another FPM instance seems to already listen on /tmp/php5-fpm.sock [28-Sep-2012 08:48:32] ERROR: An another FPM instance seems to already listen on /tmp/php5-fpm.sock [28-Sep-2012 08:48:32] ERROR: FPM initialization failed [28-Sep-2012 08:48:32] ERROR: FPM initialization failed
我確實想出瞭如何解決這個問題,它在我剛剛連結的教程中。啟動代理 plist 配置需要指定 RunOnlyOnce。不確定這對 TCP 是否安全。
不過我確實取得了一些進展,這可能會使這個問題過於具體。我使用 NetBeans 進行開發,當我嘗試使用 xdebug 啟動調試會話時,它載入得很好——很酷——但只要程式碼需要暫停一個斷點,我又回到了 1 號廣場。
comm with server ... aborted: idle timeout
只是為了覆蓋我所有的基礎,我將 httpd.conf 中的 -idle-timeout 設置為 300。沒有骰子。如果我關閉 Netbeans 並且不嘗試(永遠)啟動調試會話,則伺服器不會當機,它會按預期執行。
我正要嘗試重新啟動我的 MacBook,但老實說,這不應該是一個有效的解決方案..
所以,我想我最好評論一下這種觀點,因為其他人都沒有。
我不知道如何阻止 PHP-FPM 在通過 TCP 偵聽時一遍又一遍地記錄綁定錯誤。
我通過切換到 unix 套接字偵聽解決了我的問題,並將啟動代理配置為僅在啟動時執行一次 PHP-FPM。
我能做的最好的。也許這會對某人有所幫助,idk。
在
php-fpm.conf
listen = /tmp/php5-fpm.sock
在
httpd.conf
<IfModule mod_fastcgi.c> AddHandler php5-fcgi .php Action php5-fcgi /php5-fcgi Alias /php5-fcgi /Library/WebServer/CGI-Executables/php-fcgi FastCGIExternalServer /Library/WebServer/CGI-Executables/php-fcgi -socket /tmp/php5-fpm.sock -pass-header Authorization -idle-timeout 300 <Directory /usr/local/sbin> Options ExecCGI FollowSymLinks SetHandler fastcgi-script Order allow,deny Allow from all AllowOverride All </Directory> </IfModule>
在
/Library/LaunchAgents/homebrew-php.josegonzalez.php53.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <true/> <key>Label</key> <string>homebrew-php.josegonzalez.php53</string> <key>LaunchOnlyOnce</key> <true/> <key>ProgramArguments</key> <array> <string>/usr/local/Cellar/php53/5.3.15/sbin/php-fpm</string> <string>--fpm-config</string> <string>/usr/local/etc/php/5.3/php-fpm.conf</string> </array> <key>RunAtLoad</key> <true/> <key>Username</key> <string>www</string> <key>WorkingDirectory</key> <string>/usr/local/var</string> <key>StandardErrorPath</key> <string>/usr/local/Cellar/php53/5.3.15/var/log/php-fpm.log</string> </dict> </plist>