Apache-2.2

在虛擬主機中使用 mod fastcgi 為 apache2.2 設置 HHVM

  • March 26, 2014

我想設置一個執行 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
} 
}

引用自:https://serverfault.com/questions/583866