在虛擬主機中使用 mod fastcgi 為 apache2.2 設置 HHVM
我想設置一個執行 HHVM 的虛擬主機來嘗試新的“Facebook Hack”語言。我按照 Apache 2.2 上的說明進行操作:https ://github.com/facebook/hhvm/wiki/FastCGI
目前 hhvm 是這樣執行的:
hhvm -ms -vServer.Type=fastcgi -vServer.Port=9001
我的虛擬主機配置是:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /home/tijmen/sites/example.com php_value engine off #<IfModule fastcgi_module> Alias /hhvm.fastcgi /home/tijmen/sites/example.com/hhvm.fastcgi FastCGIExternalServer /home/tijmen/sites/example.com/hhvm.fastcgi -host 127.0.0.1:9001 <Directory "/home/tijmen/sites/example.com/"> <Files "hhvm.fastcgi"> Order deny,allow </Files> </Directory> RemoveHandler .php AddHandler hhvm-hack-extension .hh AddHandler hhvm-php-extension .php Action hhvm-hack-extension /hhvm.fastcgi virtual Action hhvm-php-extension /hhvm.fastcgi virtual #</IfModule> ErrorLog /home/tijmen/sites/log/example.com-error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel debug CustomLog /home/tijmen/sites/log/example.com.log combined </VirtualHost>
目錄 /home/tijmen/sites/example.com 設置為 chmod 777 以確保它是可寫的。一旦這個工作,它將使它更安全。
但是 example.com/index.hh(存在於 /home/tijmen/sites/example.com/index.hh 中)返回 404。在日誌中我找不到哪裡出了問題。
在讓這個東西執行之前,我想知道這個 hhvm.fastcgi 文件是什麼。我必須手動創建它嗎?它甚至是物理文件嗎?甚至可能是一個目錄?
我也在這裡問過我的問題,但問題已解決:https ://github.com/facebook/hhvm/issues/2137
就我而言,我不得不更改
RemoveHandler .php
為:<FilesMatch "\.ph(p3?|tml)$"> SetHandler None </FilesMatch> <FilesMatch "\.phps$"> SetHandler None </FilesMatch>
我也有這個問題;我也在使用 -host 而不是 -socket (我找不到 hhvm 在哪裡創建它的 sock 文件)……
關於您關於“/hhvm.fastcgi”的問題:這是別名的名稱;把它想像成一個變數。您可以將其重命名為您想要的任何名稱。在您的情況下,它只是讓您不必多次使用“/home/tijmen/sites/example.com/hhvm.fastcgi”。來源:https ://httpd.apache.org/docs/2.2/mod/mod_actions.html#page-header
(2014-03-23) 更新:
我認為 HHVM 中存在錯誤。在送出之前我需要進行更多測試,但是我讓應用程序在沒有 404 的情況下提供 *.php 文件。
我對解決方法不滿意,但它是:
編輯 /etc/init.d/hhvm-fastcgi 中的 run-as-user 變數以以 root 身份執行。第 30 行:
# RUN_AS_USER="www-data" RUN_AS_USER="root"
作為參考,這是我網站conf的底部:
<IfModule mod_fastcgi.c> RemoveHandler 應用程序/x-httpd-php # FastCGIExternalServer /apache-data/hack/.virtual -socket /apache-data/hack/hhvm.sock -pass-header Authorization -idle-timeout 300 FastCGIExternalServer /apache-data/hack/.virtual -host 127.0.0.1:9000 -pass-header Authorization -idle-timeout 300 AddHandler hhvm-hack-extension .hh AddHandler hhvm-php-extension .php 動作 hhvm-hack-extension /hhvm_fastcgi virtual 動作 hhvm-php-extension /hhvm_fastcgi 虛擬 別名/hhvm_fastcgi /apache-data/hack/.virtual </IfModule>
關於目錄結構的一些資訊:
/apache-data/hack - 應用程序的目錄。(無法訪問網路..)
/apache-data/hack/www - 網路根目錄。(其中 index.php / index.hh 是..)
index.php 目錄
<?php echo "<!DOCTYPE html><html><head></head><body>"; echo "Hello World!<br />"; if (defined('HHVM_VERSION')) echo "在 HHVM 版本上執行"。HHVM_VERSION; else echo "HHVM 離線。"; 迴聲“</body></html>”; ?>
(2014-03-23)更新 2:
要讓 HHVM 解析 *.hh,您必須編輯 /etc/hhvm/server.hdf 文件並告訴它這樣做。
附加到 /etc/hhvm/server.hdf:
php文件{ 擴展{ hphp = 應用程序/x-hhvm-php hh = 應用程序/x-hhvm-php } }