Apache 2.4 HHVM 3.1 Serviço de conteúdo estático

1

Eu configurei o Apache 2.4 com o HHVM 3.1.0 (todas as noites) no Ubuntu 13.10 Por alguma razão, o servidor serve os arquivos hhvm (.php) corretamente, mas quando tento carregar um arquivo .html / .css ou qualquer outro arquivo estático, ele inicia um download em vez de mostrar

Eu fiz essa pergunta no stackoverflow, mas ela foi colocada em espera porque está relacionada ao servidor: Original Post

Meu servidor HHVM.ini tem esta aparência:

hhvm.server.port = 9000
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.server.source_root = /var/www

hhvm.enable_static_content_from_disk = true

E o apache2.conf contém o seguinte proxypassmatch:

ProxyPassMatch ^/(.*.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/$1

Algum conselho?

    
por Marc Went 08.04.2014 / 14:36

1 resposta

2

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.

    
por 11.04.2014 / 22:55