Apache-2.2

Apache FCGI PHP-FPM Mac OS X 10.8 無法綁定

  • April 11, 2018

所以我發現了一些 關於這類問題的其他執行緒,但他們的解決方案對我不起作用。

基本上,這是我的開發機器,設置已經好幾個星期了,但突然之間我遇到了很多關於這些錯誤的問題:

[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>

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