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

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

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

Fiz esta pergunta no stackoverflow, mas ela foi suspensa porque está relacionada ao servidor:Postagem Original

Meu server.ini HHVM se parece com isto:

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?

Responder1

A diretiva ProxyPassMatch serve para rotear apenas determinado tráfego (ou seja, solicitações de arquivos php) para o servidor FastCGI (ou seja, HHVM). Use a diretiva ProxyPass:

ProxyPass / fcgi://127.0.0.1:9000/var/www/whatever.com/

De acordo comdocumentação, que deve rotear todas as solicitações para o servidor FastCGI.

Editar: ok, em resposta ao seu comentário, ProxyPassMatch é a diretiva que você deseja usar então.

Em vez de ficar indo e voltando com você sobre como você configurou tudo, vou apenas explicar como configurei no Ubuntu 12.04 e talvez você possa descobrir o que está perdendo.

Em primeiro lugar, estou usando o antigo formato de configuração .hdf, embora esteja executando o HHVM v3.1.0-dev porque não consigo fazer o log de acesso funcionar 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 continuar 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 quero parar e iniciar o HHVM, eu uso sudo stop hhvme 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 .iniformato seria mais ou menos assim:

; 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 de arquivo VirtualHost baseado em um dos meus sites que está configurado para fazer proxy de solicitações de scripts PHP para HHVM. Acontece que isso é para um site Laravel 4.2.x com URLs limpos via mod_rewrite. Se o seu site também estiver configurado para URLs limpos, certifique-se de ter [PT]no final da RewriteRulelinha para que mod_rewrite passe a solicitação para mod_proxy depois de terminar. Inicialmente, eu estava usando [L](talvez por engano) e não consegui descobrir por que o mod_proxy não estava passando a solicitação 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 nos quais você precisa se concentrar. A diretiva ProxyPassMatch deve instruir o Apache a fazer proxy de solicitações de arquivos PHP para HHVM. Solicitações para outros tipos de arquivos devem ser atendidas pelo Apache como seriam normalmente. Se você puder comentar a diretiva ProxyPassMatch, reiniciar o Apache e tudo funcionar como deveria, eu ficaria surpreso. Suponho que o seu Apache seja o culpado por fornecer arquivos CSS, JS e HTML como downloads.

informação relacionada