Como posso corrigir erros recorrentes do PHP 503 no meu servidor Apache-mod_proxy_fcgi-PHP-FPM?

4

Estou tendo problemas com a configuração do meu php-fpm. Talvez vocês possam me apontar na direção certa. Em primeiro lugar, tudo está funcionando bem. Mas de vez em quando, eu vou pegar 503 erros. Esses erros acabaram assim que eu recarreguei o site. Eles só aparecem em sites php e não são isolados para um domínio ou um framework. Eu estou recebendo os erros 503 no PHPmyAdmin, Wordpress e Typo3. Esses são os 3 sites que testei. Eles estão em vhosts separados e têm diferentes pools php-fpm, mas compartilham o mesmo processo mestre php-fpm.

O servidor que estou executando é o Apache 2.4 (MPM-Event Workers), sem mod_php ou cgi / fastcgi. Em vez disso, estou usando mod_proxy e mod_proxy_fcgi para passar cada arquivo .php para o meu processo php-fpm. Uma coisa a notar é que o servidor ainda não está em produção, portanto, há pouco ou nenhum tráfego. O hardware do servidor é strong, 12 VCores e 32 GB de RAM.

As minhas configurações de mod_proxy e mod_proxy_fcgi são padrão - eu não mudei nada lá.

Minha configuração vhost (a parte do proxy):

<FilesMatch "\.php$">
        SetHandler "proxy:unix:///opt/php-5.6.11/var/run/php5-fpm-mywebsite.sock|fcgi://mywebsite/"
    </FilesMatch>
    <Proxy fcgi://mywebsite/ enablereuse=on retry=0>
</Proxy>

Nota: Eu tive max = 10 na diretiva Proxy antes e pareceu produzir o erro 503 com mais frequência. Agora que removi max = 10, parece ocorrer menos. Pode ser apenas coincidência embora.

Minha configuração do pool PHP-FPM (as partes relevantes):

listen = var/run/php5-fpm-mywebsite.sock
listen.owner = mywebsite
listen.group = www-data
listen.mode = 0660
listen.backlog = 65535

user = mywebsite
group = www-data
listen.allowed_clients = 127.0.0.1

pm = ondemand
pm.max_children = 20
pm.process_idle_timeout = 15s

request_terminate_timeout = 300s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = no

Minha configuração do PHP-FPM (as partes relevantes):

emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10
events.mechanism = epoll

Meu PHP.ini para o processo mestre do PHP-FPM. Tudo o que não está listado aqui, é uma configuração padrão do php ou não deve ser relevante:

memory_limit = 400M
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 600
max_input_time  = -1
max_input_vars = 10000
suhosin.get.max_vars = 10000
suhosin.post.max_vars = 10000

[Zend]
zend_extension=/opt/php-5.6.11/lib/php/extensions/no-debug-non-zts-20131226/ioncube.so
zend_extension=opcache.so
opcache.revalidate_freq=0
;opcache.validate_timestamps=0
opcache.max_accelerated_files=50000
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1

[APC]
extension=apcu.so
apc.enabled=1
apc.shm_segments = 1
apc.shm_size=256M
apc.ttl=7200
apc.user_ttl=7200
apc.gc_ttl=3600
apc.stat=1
apc.enable_cli=0
apc.file_update_protection=2
apc.max_file_size=2M
apc.include_once_override=0
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.cache_by_default=1
apc.use_request_time=1
apc.slam_defense=0
apc.stat_ctime=0
apc.canonicalize=1
apc.write_lock=1
apc.report_autofilter=0
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600
apc.lazy_classes=0
apc.lazy_functions=0

extension=memcache.so
extension=memcached.so

Nota: Memcached tem 1 GB de memória alocada para ele.

Log de erros do Apache

A mensagem de erro real do apache error.log. A mensagem de erro, se sempre o mesmo. (Eu habilitei o registro de proxy detalhado):

[proxy:debug] [pid 141760:tid 140526898214656] mod_proxy.c(1159): [client myclient] AH01143: Running scheme unix handler (attempt 0), referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:debug] [pid 141760:tid 140526898214656] mod_proxy_fcgi.c(879): [client myclient] AH01076: url: fcgi://mywebsite//var/www/html/mywebsite/htdocs/typo3site/website/index.php proxyname: (null) proxyport: 0, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:debug] [pid 141760:tid 140526898214656] mod_proxy_fcgi.c(886): [client myclient] AH01078: serving URL fcgi://mywebsite//var/www/html/mywebsite/htdocs/typo3site/website/index.php, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2147): AH00942: FCGI: has acquired connection for (mywebsite)
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2200): [client myclient] AH00944: connecting fcgi://mywebsite//var/www/html/mywebsite/htdocs/typo3site/website/index.php to mywebsite:8000, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2237): [client myclient] AH02545: fcgi: has determined UDS as /opt/php-5.6.11/var/run/php5-fpm-mywebsite.sock, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2409): [client myclient] AH00947: connected //var/www/html/mywebsite/htdocs/typo3site/website/index.php to httpd-UDS:0, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:error] [pid 141760:tid 140526898214656] [client myclient] AH01067: Failed to read FastCGI header, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:error] [pid 141760:tid 140526898214656] (104)Connection reset by peer: [client myclient] AH01075: Error dispatching request to : , referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2162): AH00943: FCGI: has released connection for (mywebsite)

Agora, minha pergunta:

Como posso corrigir erros recorrentes do PHP 503 em meu servidor da Web?

Meus pensamentos:

  • Talvez mod_proxy_fcgi no modo UDS. Mas não é ruim desativar a UDS, desempenho sábio? Posso ajustar alguma coisa lá?
  • mod_proxy ou mod_proxy_fcgi não funcionam corretamente com o php-fpm ou não estão configurados corretamente?
  • APC ou ZendOPCache ou Memcached atrapalhando as coisas? Eu não diria que é a memória alocada para eles, porque quase não há nada acontecendo no servidor e há muita memória livre
  • Alguns problemas com a configuração do php.ini?
  • Alguns problemas com a configuração do php-fpm ou do pool do php-fpm?

Eu não sou exportador dessas coisas, então estou tendo dificuldades para entender as coisas. Apache com php-fpm também não parece tão comum, a maioria dos resultados do Google são baseados em nginx, o que não me ajuda muito.

Talvez alguém aqui possa me ajudar?

Muito obrigado !!

    
por Riemu 28.08.2015 / 13:33

4 respostas

2

Remova a opção enablereuse = on na sua linha Proxy, para que ela seja lida

<Proxy fcgi://mywebsite/ retry=0>

Isso resolveu o problema "Error dispatching request to:, referer ..." para mim.

    
por 16.05.2016 / 20:10
2

Eu tive o mesmo problema exato e depois de tentar entender qual era a causa, descobri que para nós o motivo era um plug-in com bugs.

Em particular, resolvemos o problema desativando este plug-in: link

Estávamos usando o php 7 e o wordpress 4.5.6.

Portanto, para nós não foi devido a uma configuração incorreta php, apache ou qualquer sistema de cache. Nem o problema foi um problema sem recurso disponível (CPU / RAM). O problema foi devido a um plugin com bugs.

Foi muito difícil descobrir quais plug-ins causaram o problema. Nós entendemos graças às opções de depuração do php, então eu sugiro adicionar estas linhas abaixo em wp-config.php para depurar:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

Melhor sorte!

    
por 02.03.2017 / 11:43
1

Como os outros posts sugeriram, o enablereuse=on não deve ser usado quando o daemon do PHP-FPM estiver rodando via um socket Unix.

A documentação do Apache para mod_proxy_fcgi confirma isso dizendo

UDS does not currently support connection reuse

UDS significa Sockets de Domínio Unix, o que significa que você está executando o PHP-FPM como um soquete (.sock), em vez do método de porta TCP padrão.

Nathan Zachary entra em grandes detalhes sobre a configuração do Apache + PHP-FPM como um soquete , entre outros tópicos relacionados.

Eu experimentei respostas loucas e imprevisíveis do Apache imediatamente depois de fazer um POST com enablereuse = on e UDS. Assim que eu removi enablereuse = on e reiniciei os serviços, o problema desapareceu completamente.

Mais sobre sintomas e depuração deste problema do pessoal do mod_h2 .

    
por 26.01.2017 / 08:01
0

listen = var/run/php5-fpm-mywebsite.sock está correto?

Quanto ao caso de host virtual, você pode tentar estas configurações:

  • Apache (na tag VirtualHost )

    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/DOCUMENT_ROOT_OF_VHOST/$1
    
  • Pool PHP-FPM

    listen = 127.0.0.1:9000
    

Se você não tem preocupações sobre .htaccess , nginx é recomendado.

    
por 01.09.2015 / 21:10