Apache 2.4 HHVM 3.1 Servicio de contenido estático

Apache 2.4 HHVM 3.1 Servicio de contenido estático

He configurado apache 2.4 con HHVM 3.1.0 (todas las noches) en ubuntu 13.10. Por alguna razón, el servidor sirve los archivos hhvm (.php) correctamente, pero cuando intento cargar un .html/.css o cualquier otro archivo estático, inicia una descarga en lugar de mostrar

Hice esta pregunta en stackoverflow pero quedó en espera porque está relacionada con el servidor:Publicación original

Mi servidor HHVM.ini se ve así:

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

Y apache2.conf contiene el siguiente proxypassmatch:

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

¿Algún consejo?

Respuesta1

La directiva ProxyPassMatch es para enrutar sólo cierto tráfico (es decir, solicitudes de archivos php) al servidor FastCGI (es decir, HHVM). Utilice la directiva ProxyPass en su lugar:

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

De acuerdo con ladocumentación, eso debería enrutar todas las solicitudes al servidor FastCGI.

Editar: está bien, en respuesta a tu comentario, ProxyPassMatch es la directiva que deseas utilizar en ese momento.

En lugar de ir y venir contigo sobre cómo tienes todo configurado, simplemente te explicaré cómo lo configuré en Ubuntu 12.04 y tal vez puedas descubrir lo que te estás perdiendo.

En primer lugar, estoy usando el antiguo formato de configuración .hdf aunque estoy ejecutando HHVM v3.1.0-dev porque parece que no puedo hacer que el registro de acceso funcione en el nuevo formato .ini. Lo intenté hhvm.log.access.file = /var/log/hhvm/access.logpero no funcionó. Se trata de un registro importante para la resolución de problemas, así que por ahora me quedaré con .hdf.

Aquí está mi guión advenedizo:

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

Siempre que quiero detener e iniciar HHVM, uso sudo stop hhvmy sudo start hhvm.

Aquí está mi archivo /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
}

En teoría, un archivo de configuración equivalente en el nuevo .iniformato se vería así:

; 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

Y aquí hay un archivo VirtualHost de ejemplo basado en uno de mis sitios que está configurado para enviar solicitudes de scripts PHP a HHVM. Esto es para un sitio Laravel 4.2.x con URL limpias a través de mod_rewrite. Si su sitio también está configurado para URL limpias, asegúrese de tenerlas [PT]al final de la RewriteRulelínea para que mod_rewrite pase la solicitud a mod_proxy una vez que haya terminado. Inicialmente, estaba usando [L](quizás por error) y no podía entender por qué mod_proxy no pasaba la solicitud a 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>

Creo que esos son los tres archivos de configuración principales en los que deberás concentrarte. La directiva ProxyPassMatch debería indicarle a Apache que envíe solicitudes de archivos PHP a HHVM. Apache debe atender las solicitudes de otros tipos de archivos como lo haría normalmente. Si puede comentar la directiva ProxyPassMatch, reiniciar Apache y todo funciona como debería, me sorprendería. Supongo que su Apache tiene la culpa de ofrecer archivos CSS, JS y HTML como descargas.

información relacionada