Apache 2.4 HHVM 3.1 Bereitstellung statischer Inhalte

Apache 2.4 HHVM 3.1 Bereitstellung statischer Inhalte

Ich habe Apache 2.4 mit HHVM 3.1.0 (nightly) auf Ubuntu 13.10 eingerichtet. Aus irgendeinem Grund stellt der Server die hhvm-Dateien (.php) korrekt bereit, aber wenn ich versuche, eine .html/.css oder eine andere statische Datei zu laden, wird ein Download initiiert, anstatt

Ich habe diese Frage auf Stackoverflow gestellt, sie wurde jedoch zurückgestellt, da sie mit dem Server zusammenhängt:Ursprünglicher Beitrag

Meine HHVM server.ini sieht folgendermaßen aus:

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

Und apache2.conf enthält das folgende ProxyPassMatch:

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

Irgendein Rat?

Antwort1

Die ProxyPassMatch-Direktive dient dazu, nur bestimmten Datenverkehr (z. B. Anfragen für PHP-Dateien) an den FastCGI-Server (z. B. HHVM) weiterzuleiten. Verwenden Sie stattdessen die ProxyPass-Direktive:

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

Entsprechend derDokumentation, das alle Anfragen an den FastCGI-Server weiterleiten sollte.

Bearbeiten: Okay, als Antwort auf Ihren Kommentar: ProxyPassMatch ist die Direktive, die Sie dann verwenden möchten.

Anstatt mit Ihnen immer wieder zu erklären, wie Sie alles eingerichtet haben, erkläre ich Ihnen einfach, wie ich es unter Ubuntu 12.04 eingerichtet habe. Vielleicht finden Sie dann heraus, was Sie übersehen haben.

Zunächst einmal verwende ich das alte .hdf-Konfigurationsformat, obwohl ich HHVM v3.1.0-dev verwende, da ich das Zugriffsprotokoll im neuen .ini-Format nicht zum Laufen bekomme. Ich habe es versucht, hhvm.log.access.file = /var/log/hhvm/access.logaber es hat nicht funktioniert. Das ist ein wichtiges Protokoll für die Fehlerbehebung, also bleibe ich vorerst bei .hdf.

Hier ist mein Upstart-Skript:

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

Wenn ich HHVM stoppen und starten möchte, verwende ich sudo stop hhvmund sudo start hhvm.

Hier ist meine /etc/hhvm/server.hdf-Datei:

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
}

Theoretisch würde eine entsprechende Konfigurationsdatei im neuen .iniFormat ungefähr so ​​aussehen:

; 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

Und hier ist eine Beispieldatei von VirtualHost basierend auf einer meiner Sites, die so konfiguriert ist, dass Anfragen für PHP-Skripte an HHVM weitergeleitet werden. Dies ist zufällig eine Laravel 4.2.x-Site mit sauberen URLs über mod_rewrite. Wenn Ihre Site auch für saubere URLs konfiguriert ist, stellen Sie sicher, dass Sie [PT]am Ende der RewriteRuleZeile Folgendes haben, damit mod_rewrite die Anfrage an mod_proxy weiterleitet, nachdem es damit fertig ist. Anfangs habe ich [L](vielleicht irrtümlicherweise) Folgendes verwendet und konnte nicht herausfinden, warum mod_proxy die Anfrage nicht an HHVM weiterleitete.

<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>

Ich denke, das sind die drei wichtigsten Konfigurationsdateien, auf die Sie sich konzentrieren müssen. Die ProxyPassMatch-Direktive sollte Apache anweisen, Anfragen für PHP-Dateien an HHVM weiterzuleiten. Anfragen für andere Dateitypen sollten wie gewohnt von Apache bedient werden. Wenn Sie die ProxyPassMatch-Direktive auskommentieren, Apache neu starten und alles wie vorgesehen funktioniert, wäre ich überrascht. Ich vermute, Ihr Apache ist schuld daran, dass CSS-, JS- und HTML-Dateien als Downloads bereitgestellt werden.

verwandte Informationen