Como corrigir o SCRIPT_NAME com o PHP-FPM e o mod_fastcgi do Apache?

2

Eu tenho o seguinte no meu Apache conf para fazer o PHP-FPM funcionar:

FastCgiExternalServer /srv/www/fast-cgi-fake-handler -host 127.0.0.1:9000
AddHandler php-fastcgi .php
AddType text/html .php
Action php-fastcgi /var/www/cgi-bin
Alias /var/www/cgi-bin /srv/www/fast-cgi-fake-handler
DirectoryIndex index.php

Isso funciona bem, exceto que SCRIPT_NAME é sempre /var/www/cgi-bin e alguns scripts usam SCRIPT_NAME para descobrir a localização do script atual (vBulletin).

O Google tem muitas soluções para o Nginx, mas não uma palavra para o Apache.

    
por Kyle MacFarlane 26.04.2011 / 19:03

4 respostas

2

Se você usar o RewriteRule no lugar do método "Action", ele funcionará bem

A seguir, um exemplo que eu usei no Apache para me conectar ao processo de daemon fastcgi externo do FCGI :: Daemon. Este daemon pode ser considerado como uma versão do php-fpm do perl.

<VirtualHost 127.0.0.1:80>
    ServerAdmin [email protected]
    DocumentRoot "/var/www/example"
    ServerName www.example.com

    <IfModule mod_fastcgi.c>
    FastCGIExternalServer /var/www/fcgi-daemon/perl.fcgi -socket /var/run/fcgi-daemon.sock
    ScriptAlias /perl.fcgi /var/www/fcgi-daemon/perl.fcgi
    </IfModule>
</VirtualHost>

<Directory /var/www/example/cgi-bin>
    Options ExecCGI
    RewriteRule ^(.*)$ /perl.fcgi [L]
</Directory>

Nota: "/ var / www / fcgi-daemon /" tem que existir! como diretório em branco. Na verdade, o método usado para php não funciona fora da caixa para o daemon perl. SCRIPT_FILENAME sempre foi /var/www/fcgi-daemon/perl.fcgi que nunca existiu, levando ao erro. O uso do RewriteRule manteve todas as variáveis de ambiente necessárias no local e as transmitiu para o daemon perl fastcgi.

    
por 29.11.2012 / 17:22
1

Descobri que ao configurar FastCgiExternalServer para um diretório que existe (provavelmente funciona para um arquivo também), como /srv/www , todas as variáveis do PHP foram definidas corretamente. No entanto, todo o conteúdo não PHP serviria como text/html ou text/plain , o que não é muito bom. Também DirectoryIndex parou de ter um efeito que me faz lembrar esta pergunta no StackOverflow mas eu não consegui chegar a lugar algum com a sua solução de fazer malabarismos com caminhos absolutos e relativos.

O único resultado relevante do Google para PHP-FPM, Apache e SCRIPT_NAME é um comentário de alguém chamado Dimas que diz que este método corrigido para ele , mas eu tinha sem essa sorte.

Eu usei o auto_prepend_file do meu php.ini em um arquivo contendo o seguinte:

<?php
$_SERVER['SCRIPT_FILENAME'] = $_SERVER['PATH_TRANSLATED'];
unset($_SERVER['PATH_TRANSLATED']);
$_SERVER['SCRIPT_NAME'] = $_SERVER['PATH_INFO'];
unset($_SERVER['PATH_INFO']);

Não é a melhor solução, mas pelo menos eu não tenho que editar manualmente o vBulletin, Wordpress, etc.

    
por 27.04.2011 / 03:03
1

Você pode consertar isso garantindo que cgi.fix-pathinfo no seu php.ini é definido como 1. Isso faz com que o PHP preencha o array $ _SERVER como você esperaria ao executar o PHP como CGI / FastCGI no Apache.

    
por 03.09.2012 / 20:57
0

link da ColtonCat acima, é a melhor resposta. Eu tentei usando nginx (proxy reverso-ssl) - > apache - > php53-fpm.

se estiver usando nginx (proxy reverso-ssl) - > apache + mod_php , você pode usar cgi.fix_pathinfo = 0

    
por 24.07.2013 / 05:09