Sinal de saída do Apache Falha de segmentação quando mod_rewrite e fcgi são usados juntos

2

Estou usando o Ubuntu 15.04, Apache / 2.4.10. Eu habilitei mod_rewrite e mod_proxy_fcgi.

Minha configuração do apache para o fcgi é:

ProxyPassMatch ^/(.+\.(hh|php)(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/myapp/$1

Quando eu solicito o link , ele funciona perfeitamente

Eu adicionei uma regra de reescrita como esta:

RewriteRule ^foo index.php?country=de&handle=cleanmaster&offer=3

Agora, quando eu solicito que o link Apache falhe com este erro:

[pid 4242:tid 140535432255360] AH00051: child pid 4539 exit signal Segmentation fault (11), possible coredump in /tmp/apache2-gdb-dump

Se eu olhar para o dump principal, este é o rastreio da pilha:

Program terminated with signal SIGSEGV, Segmentation fault.
#0  strlen () at ../sysdeps/x86_64/strlen.S:106

warning: Source file is more recent than executable.
106     movdqu  (%rax), %xmm12
(gdb) where
#0  strlen () at ../sysdeps/x86_64/strlen.S:106
#1  0x00007fd0f461ed37 in ap_fcgi_encoded_env_len ()
#2  0x00007fd0f03b328d in ?? () from /usr/lib/apache2/modules/mod_proxy_fcgi.so
#3  0x00007fd0f05c0653 in proxy_run_scheme_handler () from /usr/lib/apache2/modules/mod_proxy.so
#4  0x00007fd0f05c161c in ?? () from /usr/lib/apache2/modules/mod_proxy.so
#5  0x00007fd0f46182a0 in ap_run_handler ()
#6  0x00007fd0f46187e9 in ap_invoke_handler ()
#7  0x00007fd0f462dfac in ap_internal_redirect ()
#8  0x00007fd0eff98ea2 in ?? () from /usr/lib/apache2/modules/mod_rewrite.so
#9  0x00007fd0f46182a0 in ap_run_handler ()
#10 0x00007fd0f46187e9 in ap_invoke_handler ()
#11 0x00007fd0f462e682 in ap_process_async_request ()
#12 0x00007fd0f462b1f0 in ?? ()
#13 0x00007fd0f4621b10 in ap_run_process_connection ()
#14 0x00007fd0f09e1b0b in ?? () from /usr/lib/apache2/modules/mod_mpm_event.so
#15 0x00007fd0f3abc6aa in start_thread (arg=0x7fd0e77fe700) at pthread_create.c:333
#16 0x00007fd0f37f1eed in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

BTW se eu desabilitar o fcgi, regra de reescrita funciona bem e o arquivo correto é mostrado. Neste caso, simplesmente não passa pelo fcgi e, claro, o arquivo de origem é baixado. Eu acredito que algo dá errado com mixagem de reescrita e fcgi

    
por slashmili 25.12.2015 / 06:08

3 respostas

0

Parece provável que os nossos próprios problemas tenham origem na configuração do nosso Chef, instalando o httpd, o PHP-FPM e o próprio PHP a partir de duas fontes diferentes (EPEL vs IUS).

    
por 21.07.2016 / 17:46
0

Eu tive um problema semelhante. Acontece que no Apache 2.4 você não pode ter a opção mod_geoip 'GeoIPScanProxyHeaders' definida como 'On' ao mesmo tempo em que 'mod_remoteip' está ativado. 'GeoIPScanProxyHeaders' é uma configuração para obter o endereço IP do cliente para uso por 'mod_geoip'. Em vez disso, o 'mod_remoteip' deve ser preferido e o 'mod_geoip' usará as descobertas do 'mod_remoteip'. Definindo 'GeoIPScanProxyHeaders' e 'mod_remoteip' ao mesmo tempo, quebra o mod_rewite, pelo menos no que se refere ao php-fpm.

    
por 22.07.2016 / 14:36
0

Tivemos o mesmo problema no Ubuntu 16.04 ao tentar migrar uma configuração que funcionava bem no CentOS.

Encontrei uma solução útil: alterar o RewriteRule para usar um sinalizador de manipulador para definir o servidor fcgid de destino como proxy, em vez de usar ProxyPassMatch , as solicitações permitidas funcionem conforme o design original:

RewriteEngine On
# Force all non-files to go via fcgi proxy bootstrap file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ "-" [QSA,L,H=proxy:fcgi://127.0.0.1:9000/var/www/html/public/index.php]
# Force all php files to go via fcgi proxy verbatim
RewriteCond "%{REQUEST_FILENAME}" ".php$"
RewriteRule ^ "-" [QSA,L,H=proxy:fcgi://127.0.0.1:9000%{REQUEST_FILENAME}]

Observe que a configuração acima manipula a configuração do ambiente transmitido para o fcgi de maneira ligeiramente diferente da configuração ProxyPass, talvez seja necessário ajustar o tratamento do ambiente no lado do recebedor para que o aplicativo interprete o caminho corretamente. Por exemplo, descobrimos que adicionar o seguinte ao nosso arquivo index.php de recebimento é útil com nosso PHP-FPM setup:

$_SERVER['SCRIPT_NAME'] = '/' . __FILE__;

Como dito acima, dado que os processos do apache estão sendo reprovados com uma configuração válida, eu esperaria que isso fosse resolvido para a configuração RewriteRule / ProxyPassMatch, informando isso aos mantenedores do pacote ubuntu, que potencialmente precisam reconstruí-los com um ambiente alterado.

    
por 11.07.2018 / 10:16