Eu instalei recentemente o Apache 2.4 na minha máquina local, junto com o PHP 5.4.8 usando o PHP-FPM.
Tudo correu bem (depois de um tempo ...), mas ainda existe um erro estranho:
Eu configurei o Apache para PHP-FPM assim:
Funciona, por exemplo, se eu ligar http://localhost/info.php, recebo o correto phpinfo()(é apenas um arquivo de teste).
Se eu chamar um diretório, no entanto, recebo um 404 com corpo File not found.e no log de erros:
Agora eu tentei fazer o proxy com mod_rewrite:
Mas o problema é: ele está sempre redirecionando, porque é solicitado http://localhost/automaticamente http://localhost/index.php, por causa de
Ok, então acho que "talvez verifique se há um arquivo para fornecer ao proxy primeiro:
Agora a reescrita completa não funciona mais ...
Agora eu tenho esta solução:
Primeiro verifique se há um arquivo para passar ao PHP-FPM (com o caminho completo e absoluto ) e depois faça a reescrita.
Isso não funciona ao usar a reescrita de URL dentro de um subdiretório, mas também falha em URLs como http://localhost/index.php/test/ So, de volta à estaca zero.
— apfelbox
Depois de horas pesquisando e lendo a documentação do Apache, encontrei uma solução que permite usar o pool e também permite que a diretiva Rewrite no .htaccess funcione mesmo quando o URL contém arquivos .php.
De acordo com a documentação do Apache, o parâmetro do proxy SetHandler requer o Apache HTTP Server 2.4.10.
Espero que esta solução também o ajude.
— FrancescoA
Esta é definitivamente a resposta para 2015, tudo aqui é uma porcaria para uma configuração moderna (Digamos debian stable)
Estou batendo a cabeça contra a parede nesse mesmo problema há algum tempo e tenho uma configuração extremamente semelhante à sua. Você poderia postar suas diretivas .htaccess Rewrite? Pelo que entendi, tudo nesta resposta é apenas o que você tem no seu arquivo httpd.d / site.conf.
No momento, o uso desse RewriteRule parece bastante perigoso, pois pode expor os config.php arquivos sem formatação se eles estiverem dentro de diretórios com alias e, portanto, não existem em% {DOCUMENT_ROOT} /% {REQUEST_URI}.
— Zulakis
Incríveis 9 linhas de código. Este é o Santo Graal e a única coisa que funciona 100% para mim. Apenas uma nota de rodapé: se você estiver alternando de uma solução usando o LocationMatch, não precisará anexar o caminho absoluto do arquivo ao URL fcgi. Ative o proxy e reescreva o logon no apache para observar isso.
— 8166 Phil
+1 porque esta postagem, diferente de qualquer outro recurso que eu já vi, me ajudou a entender o que "string de nome de domínio exclusivo" deve representar.
— Threeve 5/04
Também encontrei esse problema ontem - o Apache 2.4 saiu do Debian / experimental para o Debian / instável, forçando-me a lidar com esse novo material; não em nossos servidores de produção, é claro;).
Depois de ler o que parece ser milhões de sites, documentos do Apache, relatórios de erros e saída de depuração no log de erros, finalmente consegui que funcionasse. Não, ainda não há suporte para o FPM com soquetes . A configuração padrão do Debian já usa soquetes há algum tempo, então os usuários do Debian também terão que mudar isso.
Aqui está o que funciona para um site CakePHP e para o PHPMyAdmin (o último precisa de alguma configuração se você estiver usando os pacotes Debian), para que eu possa confirmar que mod_rewriteainda funciona como esperado para reescrever URLs sofisticadas.
Observe DirectoryIndex index.phpque pode ser o motivo pelo qual nenhuma de suas configurações funcionou para "pastas" (pelo menos foi o que não funcionou aqui).
Ainda obtenho File not found.diretórios, mas somente se não houver um arquivo de índice ele poderá analisar. Adoraria se livrar disso também, mas não é tão crítico quanto agora.
O vhost acima funciona perfeitamente bem com um .htaccess na raiz assim:
Mas não entendi bem o que você quer dizer URL rewriting inside a subdirectory(estou reescrevendo apenas o index.php da raiz).
(Ah, e você terá que garantir que o Xdebug não entre em conflito com o FPM no seu sistema, pronto para usar as mesmas portas.)
Esta é uma boa solução, mas infelizmente essa abordagem não funciona quando os URLs que contêm .php precisam ser reescritos, por exemplo, para o multisite do WordPress. /ms_blog_1/wp-admin/load-scripts.php?blah=blah
Para mim, basta adicionar uma substituição DirectoryIndex index.htmlno vhost em questão corrigido. Se eu tiver DirectoryIndex index.php, parece que outros arquivos PHP acabam dando o erro 'Arquivo não encontrado' e 'Script primário desconhecido'. No meu caso, eu tenho index.htmlapenas um arquivo php test.php.
Tudo que você precisa fazer é definir:
E não se esqueça de definir a página do cliente:
— Shiqi Zhong
É isso que eu tenho. Parece funcionar bem. Coloquei o Drupal em um subdiretório e ele reescreve o trabalho, os índices de diretório funcionam e o PATH_INFO funciona.
Eu tentei fazer algo assim sem reescrever ("If" e tal), mas não consegui fazer nada funcionar.
EDIT: Observe que, se você implementasse isso como um provedor de hospedagem compartilhada, isso poderia ser um problema de segurança. Isso permitiria que os usuários passassem scripts PHP para um proxy fcgi arbitrário. Se você tivesse um pool separado para cada usuário, isso permitiria ataques de elevação de privilégios.
— RockinRoel
Outra solução (requer Apache> = 2.4.10) - Dentro do vhost:
Portanto, aqui, o manipulador fcgi para PHP será definido apenas se o arquivo existir e se seu nome corresponder à extensão do arquivo PHP.
BTW: Para aqueles que teriam idéia de definir o ProxyErrorOverride como Ativado , saiba que essa é realmente uma péssima idéia. O uso desta diretiva não ocorre sem causar nenhum problema. Por exemplo, qualquer aplicativo PHP que envie código HTTP como 503 levaria a resultados inesperados. O manipulador de erros padrão estaria envolvido em todos os casos e, para aplicativos PHP que fornecem API, esse é realmente um mau comportamento.
— Nuxwin
Infelizmente ainda tinha o erro "AH01071: obteve o erro 'Script primário desconhecido \ n'" usando esta solução.
A melhor maneira de resolver isso é ativar os logs de depuração para mod_proxy e mod_rewrite e php-fpm. No apache 2.4, agora você pode ativar os logs de depuração apenas para módulos específicos. http://httpd.apache.org/docs/current/mod/core.html#loglevel A configuração por módulo e por diretório está disponível no Apache HTTP Server 2.3.6 e posterior
Talvez você esteja recebendo uma barra dupla nos diretórios?
Aqui está o que eu uso e funciona bem:
— troseman
Uma coisa que me deparei ao lidar com esse problema é que, se você usar a combinação de:
Na configuração do seu pool de fpm, não passe o caminho completo para a ProxyPassdiretiva.
Mas -SOMENTE- se o pool nessa porta estiver com chroot.
— gelo fino
Não tenho certeza se o problema está relacionado, mas encontrei uma solução que funciona parcialmente aqui:
O truque parece estar adicionando um? char no .htaccess RewriteRule, por exemplo, usando:
A fonte do problema parece ser uma alteração no mod_rewrite do Apache 2.4.25. Eu usei o nível de log Apache trace1 para observar um "loop" que passa $ 1 para php-fpm após a indexação de index.php / $ 1. O $ 1 gera o erro "AH01071: Erro obtido 'script primário desconhecido \ n'".
Espero que este pequeno detalhe ajude alguém a resolver seus problemas.
— Biapy
Linode tem um ótimo tutorial sobre esse assunto
Basicamente, você configura um manipulador para todo o servidor que captura todos os scripts php e os passa para o fast-cgi.
— chiqueiros
Eu tenho o erro também depois de mudar para php-fpm + apache 2.4.6 para instâncias drupal
mas estou usando o mod de evento mpm
basta inserir
DirectoryIndex index.php funciona para mim
então minhas configurações de Vhost se parecem abaixo
não é necessário revisar o arquivo .htaccess padrão do drupal
— vedação
[Wed Apr 25 01: 41: 31.526781 2018] [proxy_fcgi: error] [pid 2012: tid 140181155772160] (70007) O tempo limite especificado expirou: [client 127.0.0.1:60308] AH01075: Erro ao enviar solicitação para:, referenciador: www / admin / reports
— sealionking
Eu enfrento os mesmos problemas no meu servidor (docker centos 7.3.16). Depois de rastrear o log php-fpm, encontrei miss a sys lib. WARNING: [pool www] child 15081 said into stderr: "php-fpm: pool www: symbol lookup error: /lib64/libnsssysinit.so: undefined symbol: PR_GetEnvSecure" Se você não encontrar as soluções depois de tentar qualquer método, poderá tentar isso. yum -y install/reinstall nspr
— limão
Isso funciona com o Wordpress 5.1.1 e mais recente, juntamente com o PHP 7.3, FastCGI, proxy, também MariaDB / MySQL. Verificado duas vezes nos meus servidores. Funciona como um encanto.
Primeiro no CentOS / Fedora / Red Hat
Edite este arquivo:
Deve dar srw-rw-rw-.
Ou como configurar no Debian / Ubuntu
O problema é que o php 7.3 do Ondrej repo funciona apenas com o modo mpm_prefork. Ele tem git repo, então você pode encontrá-lo na net e perguntar se ele fará o php 7.3 para mpm_worker e mpm_event. O restante da configuração para as distribuições da família Debian está abaixo:
copie isso para o arquivo txt:
remova-o e cole-o em vez de acima:
Adicionar diretiva
Em seguida, ative o site:
Próxima edição do site SSL (neste caso, o certbot de Let's Encrypt foi instalado e configurado anteriormente no início da configuração do certificado SSL).