Apache FCGI PHP-FPM Mac OS X 10.8 incapaz de ligar

2

Então, eu encontrei um poucos outros tópicos sobre esse tipo de problema, mas suas soluções não estão funcionando para mim.

Basicamente, esta é a minha máquina de desenvolvimento e a configuração está bem há algumas semanas, mas de repente estou tendo muitos problemas com esses erros:

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

Eu não mudei nada relacionado à configuração do servidor. Obviamente, algo deve ter mudado, ou eu acabei de ter azar ...

A configuração é a seguinte:

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>

É praticamente um php-fpm.conf padrão com a localização do log alterada, ondemand gerenciador de processos, pm.max_children = 1 e todo o resto é padrão.

Eu tentei reiniciar o apache dezenas de vezes e matar todos os processos do php-fpm, em diferentes ordens.

Todas as sugestões serão encorajadas, bem-vindas, apreciadas, julgadas e esperadas.

ATUALIZAÇÃO 28/09/2012

Ok, então usei este tutorial e tentei a abordagem de soquete para ver se era uma colisão de porta TCP - acaba por não. O uso de sockets também não ajudou as mensagens de erro a cada 10 segundos como estas:

Para 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

Para soquetes:

[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

Eu descobri como resolver isso, e está no tutorial que acabei de vincular. A configuração do plist do agente de ativação precisa especificar RunOnlyOnce. Não tenho certeza se isso é seguro para o TCP.

Eu tenho algum progresso, o que pode tornar esta questão muito específica. Eu uso o NetBeans para desenvolvimento, e quando eu tentei iniciar uma sessão de depuração usando o xdebug, ele carrega bem - legal - mas assim que o código precisa de pausa em um ponto de interrupção, estou de volta ao quadrado 1. comm with server ... aborted: idle timeout

Apenas para cobrir todas as minhas bases, defino -idle-timeout em httpd.conf para 300. Sem dados. Se eu desligar o NetBeans e não tentar (nunca) iniciar uma sessão de depuração, o servidor não morrerá, ele se comportará como pretendido.

Estou prestes a tentar reiniciar o meu MacBook, mas sinceramente isso não deveria ser uma solução válida.

    
por shousper 27.09.2012 / 08:50

2 respostas

2

Então, achei melhor comentar sobre isso, como ninguém mais fez.

Eu NÃO tenho idéia de como impedir que o PHP-FPM registre os erros de ligação repetidas vezes ao ouvir via TCP.

Eu resolvi meu problema mudando para a escuta de socket unix e configurando o agente de lançamento para executar o PHP-FPM apenas uma vez na inicialização.

Melhor que eu poderia fazer. Talvez isso ajude alguém, idk.

Em php-fpm.conf

listen = /tmp/php5-fpm.sock

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

Em /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>
    
por 24.10.2012 / 01:53
0

apenas faça l s-lA no seu projeto e descubra qual usuário você é e agrupa. e edite o php-fpm.conf para o php-fpm5.6 e www.conf para o php7. * versão

No meu caso, meu usuário = vallabh e group = staff

e atualize o listen = 127.0.0.1:9071 e ouça = 127.0.0.1:9056

é bastante prático e fácil de lembrar a porta.

codificação feliz.

use o código de shell abaixo para verificar se você está ligando a porta.

lsof -Pni4 | grep LISTEN | grep php

    
por 11.04.2018 / 17:51