
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 のせいだと思います。