在虚拟主机中使用 mod fastcgi 为 apache2.2 设置 HHVM

在虚拟主机中使用 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

答案1

就我而言,我必须改变RemoveHandler .php成:

<FilesMatch "\.ph(p3?|tml)$">                                                                                                                                            
    SetHandler None                                                                                                                                                      
</FilesMatch>                                                                                                                                                            
<FilesMatch "\.phps$">                                                                                                                                                   
    SetHandler None                                                                                                                                                      
</FilesMatch>

答案2

我也遇到了这个问题;我也使用 -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年3月23日) 更新:

我认为 HHVM 中有一个错误。提交之前我需要进行更多测试,但我让应用程序能够提供 *.php 文件,而不会出现 404。

我对这个解决方法不太满意,但是它如下:

编辑 /etc/init.d/hhvm-fastcgi 中的 run-as-user 变量以作为 root 运行。第 30 行:

# RUN_AS_USER="www-data"
RUN_AS_USER="root"

作为参考,这是我的网站配置文件的底部:

<IfModule mod_fastcgi.c>
    RemoveHandler 应用程序/x-httpd-php
    # FastCGIExternalServer /apache-data/hack/.virtual -socket /apache-data/hack/hhvm.sock -pass-header 授权 -idle-timeout 300
    FastCGIExternalServer /apache-data/hack/.virtual -host 127.0.0.1:9000 -pass-header 授权 -idle-timeout 300

    添加处理程序 hhvm-hack-扩展.hh
    添加处理程序 hhvm-php-扩展.php

    操作 hhvm-hack-extension /hhvm_fastcgi 虚拟
    操作 hhvm-php-extension /hhvm_fastcgi 虚拟

    别名 /hhvm_fastcgi /apache-data/hack/.virtual
</IfModule>

关于目录结构的一些信息:

/Apache-数据/黑客- 应用程序的目录。(无法访问网络..)

/Apache-数据/黑客/www- Web 根目录。(index.php / index.hh 位于此处..)

index.php 内容

<?php
    回声 “<!DOCTYPE html><html><head></head><body>”;
    回显“你好,世界!<br />”;
    if (defined('HHVM_VERSION')) echo "在 HHVM 版本上运行 ". HHVM_VERSION;
    否则回显“HHVM 已离线。”;
    回声“ </ body ></ html>”;
>

(2014年3月23日)更新 2:

要让 HHVM 解析 *.hh,您必须编辑 /etc/hhvm/server.hdf 文件并告诉它这样做。

附加到 /etc/hhvm/server.hdf:

Php文件 {
    扩展 {
        hphp = 应用程序/x-hhvm-php
        hh = 应用程序/x-hhvm-php
    }   
}

相关内容