A diretiva ProxyPassMatch destina-se ao roteamento de apenas determinado tráfego (ou seja, solicitações de arquivos php) para o servidor FastCGI (por exemplo, HHVM). Use a diretiva ProxyPass em vez disso:
ProxyPass / fcgi://127.0.0.1:9000/var/www/whatever.com/
De acordo com a documentação , isso deve encaminhar todas as solicitações para o servidor FastCGI.
Edit: ok, em resposta ao seu comentário, ProxyPassMatch é a diretiva que você deseja usar.
Em vez de ir e voltar com você sobre como você configurou tudo, vou explicar como eu o configurei no Ubuntu 12.04 e talvez você possa descobrir o que está perdendo.
Primeiro de tudo, estou usando o antigo formato de configuração .hdf, embora eu esteja executando o HHVM v3.1.0-dev porque não consigo obter o log de acesso funcionando no novo formato .ini. Eu tentei hhvm.log.access.file = /var/log/hhvm/access.log
mas não funcionou. Esse é um registro importante para solução de problemas, então vou ficar com .hdf por enquanto.
Aqui está meu script inicial:
description "HipHop VM server"
start on filesystem or runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5
umask 002
pre-start script
mkdir -p -m0755 /var/run/hhvm
chown apachetwo:threews /var/run/hhvm
end script
# Location of executable
env SERVER=/usr/local/sbin/hhvm
exec $SERVER --mode daemon -c /etc/hhvm/test.hdf --user apachetwo
Sempre que eu quiser parar e iniciar o HHVM, eu uso sudo stop hhvm
e sudo start hhvm
.
Aqui está meu arquivo /etc/hhvm/server.hdf:
PidFile = /var/run/hhvm/pid
Server {
Type = fastcgi
Port = 9000
SourceRoot = /var/www/html/
DefaultDocument = index.php
}
Log {
Level = Verbose
AlwaysLogUnhandledExceptions = true
RuntimeErrorReportingLevel = 8191
UseLogFile = true
UseSyslog = false
File = /var/log/hhvm/error.log
Access {
* {
File = /var/log/hhvm/access.log
Format = %h %l %u % t \”%r\” %>s %b
}
}
}
Repo {
Central {
Path = /var/log/hhvm/.hhvm.hhbc
}
}
MySQL {
TypedResults = false
}
Teoricamente, um arquivo de configuração equivalente no novo formato .ini
seria parecido com isto:
; php options
pid = /var/run/hhvm/pid
; hhvm specific
hhvm.server.type = fastcgi
hhvm.server.port = 9000
hhvm.server.source_root = /var/www/html
hhvm.server.default_document = index.php
hhvm.log.level = Verbose
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.log.use_log_file = true
hhvm.log.use_syslog = false
hhvm.log.file = /var/log/hhvm/error.log
hhvm.log.access.file = /var/log/hhvm/access.log
hhvm.log.access.format = %h %l %u % t \”%r\” %>s %b
hhvm.repo.central.path = /var/log/hhvm/.hhvm.hhbc
hhvm.mysql.typed_results = false
E aqui está um exemplo do arquivo VirtualHost baseado em um dos meus sites que está configurado para fazer proxy de solicitações de scripts PHP para o HHVM. Isso acontece com um site do Laravel 4.2.x com URLs limpas via mod_rewrite. Se o seu site também estiver configurado para URLs limpos, certifique-se de ter [PT]
no final da linha RewriteRule
, para que o mod_rewrite passe a solicitação para o mod_proxy depois que terminar. Inicialmente, eu estava usando [L]
(talvez por engano) e não conseguia descobrir por que o mod_proxy não estava passando o pedido para o HHVM.
<VirtualHost *:80>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/site.com/htdocs/public/$1
DirectorySlash On
DirectoryIndex index.php
ServerAdmin [email protected]
ServerName www.site.com
DocumentRoot /var/www/site.com/htdocs/public/
AllowEncodedSlashes On
# Don't display the ServerAdmin email address on server generated pages
ServerSignature Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !^(index\.php|/images|/includes|/cache|/mpd|/packages|/queues|/samples|/robots\.txt|/sitemap\.xml)
RewriteRule ^(.*)$ /index.php$1 [PT]
<Directory /var/www/site.com/htdocs>
Require all granted
Options +FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/site.com/htdocs/public>
Require all granted
Options +FollowSymLinks
AllowOverride None
</Directory>
ErrorLog /var/log/apache2/www.site.com.error.log
LogLevel alert rewrite:trace6 proxy:trace6
CustomLog /var/log/apache2/www.site.com.access.log combined
</VirtualHost>
Acho que esses são os três principais arquivos de configuração que você precisará focar. A diretiva ProxyPassMatch deve instruir o Apache para solicitações de proxy para arquivos PHP no HHVM. Solicitações de outros tipos de arquivos devem ser atendidas pelo Apache como normalmente seriam. Se você pode comentar a diretiva ProxyPassMatch, reinicie o Apache e tudo funciona como deveria, então eu ficaria surpreso. Eu estou supondo que o seu Apache é o culpado por servir arquivos CSS, JS e HTML como downloads.