Apache 2.4 HHVM 3.1 静的コンテンツ配信

Apache 2.4 HHVM 3.1 静的コンテンツ配信

Ubuntu 13.10でApache 2.4とHHVM 3.1.0(nightly)をセットアップしました。何らかの理由でサーバーはhhvmファイル(.php)を正しく提供しますが、.html/.cssまたはその他の静的ファイルを読み込もうとすると、ダウンロードが開始され、

私はstackoverflowでこの質問をしましたが、サーバー関連であるため保留になりました。オリジナル投稿

私の HHVM server.ini は次のようになります。

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

apache2.conf には次の proxypassmatch が含まれています。

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

何かアドバイス?

答え1

ProxyPassMatch ディレクティブは、特定のトラフィック (つまり、php ファイルのリクエスト) のみを FastCGI サーバー (つまり、HHVM) にルーティングするためのものです。代わりに ProxyPass ディレクティブを使用します。

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

によるドキュメンテーションこれにより、すべてのリクエストが FastCGI サーバーにルーティングされます。

編集: わかりました。あなたのコメントに応えて、ProxyPassMatch が使用したいディレクティブです。

すべてをどのように設定したかについて何度も説明する代わりに、Ubuntu 12.04 でどのように設定したかを説明します。そうすれば、何が足りないのかがわかるかもしれません。

まず、HHVM v3.1.0-dev を実行しているにもかかわらず、アクセス ログを新しい .ini 形式では機能させられないため、古い .hdf 構成形式を使用しています。試してみましたhhvm.log.access.file = /var/log/hhvm/access.logが、うまくいきませんでした。これはトラブルシューティングにとって重要なログなので、今のところは .hdf を使い続けるつもりです。

これが私のアップスタート スクリプトです:

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

HHVM を停止して起動したいときは、sudo stop hhvmと を使用しますsudo start hhvm

私の /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
}

理論的には、新しい.ini形式の同等の設定ファイルは次のようになります。

; 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

また、PHP スクリプトのリクエストを HHVM にプロキシするように設定されている、私のサイトの 1 つに基づいた VirtualHost ファイルの例を次に示します。これは、mod_rewrite 経由でクリーン URL を使用する Laravel 4.2.x サイト用です。サイトがクリーン URL 用に設定されている場合は、行[PT]の末尾にを追加してRewriteRule、mod_rewrite が処理を終えた後にリクエストを mod_proxy に渡すようにしてください。最初は、(おそらく誤って) を使用していました[L]が、mod_proxy がリクエストを 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>

これらが、重点的に確認する必要がある主な 3 つの構成ファイルだと思います。ProxyPassMatch ディレクティブは、Apache に PHP ファイルへのリクエストを HHVM にプロキシするように指示します。他のファイル タイプへのリクエストは、通常どおり Apache によって処理されます。ProxyPassMatch ディレクティブをコメント アウトして Apache を再起動すると、すべてが正常に動作するようになるとしたら、驚きです。CSS、JS、HTML ファイルをダウンロードとして処理するのは、Apache のせいだと思います。

関連情報