Назад | Перейти на главную страницу

Настройка HHVM для apache2.2 с модом fastcgi на виртуальном хосте

Я хочу настроить виртуальный хост с HHVM, чтобы опробовать новый язык «Facebook Hack». Я следовал инструкциям здесь на Apache 2.2: https://github.com/facebook/hhvm/wiki/FastCGI

в настоящее время hhvm работает так:

hhvm -m s -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 есть ошибка. Мне нужно будет еще протестировать, прежде чем я отправлю его, но у меня есть приложение для обслуживания файлов * .php без 404.

Мне не нравится обходной путь, но вот он:

Измените переменную запуска от имени пользователя в /etc/init.d/hhvm-fastcgi для запуска от имени пользователя root. Строка 30:

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

Для справки, вот нижняя часть конференции моего сайта:

<IfModule mod_fastcgi.c>
    RemoveHandler application/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

    Action hhvm-hack-extension /hhvm_fastcgi virtual
    Action hhvm-php-extension /hhvm_fastcgi virtual

    Alias /hhvm_fastcgi /apache-data/hack/.virtual
</IfModule>

Немного информации о структуре каталогов:

/ apache-data / взломать - Каталог приложения. (Недоступно для Интернета ..)

/ 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 "Running on HHVM version ". HHVM_VERSION;
    else echo "HHVM is offline.";
    echo "</body></html>";
?>

(2014-03-23) Обновление 2:

Чтобы HHVM анализировал * .hh, вы должны отредактировать файл /etc/hhvm/server.hdf и указать ему это сделать.

Добавьте в /etc/hhvm/server.hdf:

PhpFile {
    Extensions {
        hphp = application/x-hhvm-php
        hh = application/x-hhvm-php
    }   
}