
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.log
pero 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 hhvm
y 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 .ini
formato 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 RewriteRule
lí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.