Apache 2.4 HHVM 3.1 Обслуживание статического контента

Apache 2.4 HHVM 3.1 Обслуживание статического контента

Я настроил Apache 2.4 с HHVM 3.1.0 (nightly) на Ubuntu 13.10. По какой-то причине сервер правильно обслуживает файлы 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, и, возможно, вы поймете, чего вам не хватает.

Во-первых, я использую старый формат конфигурации .hdf, хотя я и работаю на HHVM v3.1.0-dev, потому что я не могу заставить работать журнал доступа в новом формате .ini. Я пробовал, 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

И вот пример файла VirtualHost на основе одного из моих сайтов, настроенного на проксирование запросов PHP-скриптов в HHVM. Это как раз для сайта Laravel 4.2.x с чистыми URL-адресами через mod_rewrite. Если ваш сайт также настроен на чистые 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>

Я думаю, это основные три файла конфигурации, на которых вам нужно сосредоточиться. Директива ProxyPassMatch должна указывать Apache на необходимость проксирования запросов на файлы PHP в HHVM. Запросы на другие типы файлов должны обслуживаться Apache, как обычно. Если вы можете закомментировать директиву ProxyPassMatch, перезапустить Apache и все заработает как надо, то я буду удивлен. Я предполагаю, что ваш Apache виноват в обслуживании файлов CSS, JS и HTML в качестве загрузок.

Связанный контент