使用Nginx的HHVM 3.0 / Hack无法访问Ubuntu 13.10上具有770权限的目录中的文件

时间:2014-03-30 20:17:07

标签: ubuntu nginx hiphop hhvm

我已将 nginx 设置为在fast-cgi模式下使用HipHop VM 3.0版。一些事实:

  1. 我正在使用Ubuntu 13.10
  2. nginx和hhvm以用户www-data身份运行。
  3. 用户www-data位于组fooers
  4. nginx的服务器根目录是/srv/foo目录,其中包含一个index.php个文件
  5. /srv/foo的群组所有权是群组fooers
  6. /srv/foo权限设置为770
  7. 当我尝试查看此页面时,我找不到404,但hhvm或nginx日志中没有记录错误。但是,如果我更改了775 /srv/foo上的hhvm权限,则nginx$> ps -aux 完全按照预期提供网页。

    此外,如果我将www-data用户的 默认 组更改为fooers组,则可以使用770权限。当它不是用户的默认组时,它似乎只会失败。

    问题是什么?!?!?有谁知道为什么hhvm / nginx作为用户www-data运行,当权限为770时,无法访问对目录的组访问权限?

    为了确认我的理智并确保我的群组和权限与我认为的一样,在启动服务后,我运行

    www-data

    我看到预期的hhvm进程和运行为www-data 3484 .... /usr/bin/hhvm --config /etc/hhvm/server.ini --user www-data --mode daemon -vPidFile=/var/run/hhvm/pid www-data 3617 ... nginx: worker process 的nginx进程:

    $> groups www-data
    www-data : www-data fooers
    

    当我检查组时,我看到:

    $> ls -al
    total 16
    drwxr-xr-x  5 root root   4096 Mar 30 15:57 .
    drwxr-xr-x 22 root root   4096 Mar 30 11:52 ..
    drwxrwx---  2 root fooers 4096 Mar 30 15:39 foo
    

    当我检查目录时,我可以确认100%访问组和所有者:

    www-data

    如果我将文件的内容检查为允许的$> sudo -u www-data ls -al /srv/foo total 12 drwxrwx--- 2 root fooers 4096 Mar 30 15:39 . drwxr-xr-x 5 root root 4096 Mar 30 15:57 .. -rw-rw-r-- 1 root fooers 38 Mar 30 15:39 index.php 用户:

    /etc/hhvm/server.ini

    如果我在不在fooers组中的用户尝试上述操作,则会失败。

    这是我的; php options pid = /var/run/hhvm/pid ; hhvm specific hhvm.server.port = 9000 hhvm.server.type = fastcgi hhvm.server.default_document = index.php hhvm.log.level = Warning hhvm.log.always_log_unhandled_exceptions = true hhvm.log.runtime_error_reporting_level = 8191 hhvm.log.use_log_file = true hhvm.log.file = /var/log/hhvm/error.log hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc hhvm.mysql.typed_results = false

    location ~ \.php$ {
        root /srv/foo
        fastcgi_keep_conn on;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /srv/foo$fastcgi_script_name;
        include        fastcgi_params;
    }
    

    我真的希望这不是一件愚蠢而且显而易见的事情,我忽略了......

    这是我的网络根目录的nginx位置块:

    {{1}}

2 个答案:

答案 0 :(得分:1)

请尝试更改您的配置文件,您的SourceRoot中没有。我的一些confs被启动参数覆盖。

在这里查看一下:/usr/bin/hhvm --config /etc/hhvm/server.hdf --user www-data --mode daemon -vServer.Type=fastcgi -vServer.Port=9010

PidFile = /var/run/hhvm/pid

Server {
  Port = 82
  SourceRoot = /var/www/main/
  DefaultDocument = index.php
}

#AdminServer {
#    Port = 9088
#    ThreadCount = 1
#    Password = xxx
#}

Eval {
    Jit = true
    JitWarmupRequests = 5
}

Log {
  Level = Error
  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/run/hhvm.hhbc.sq3
#  }
#}

#include "/usr/share/hhvm/hdf/static.mime-types.hdf"
StaticFile {
  FilesMatch {
    * {
      pattern = .*\.(dll|exe)
      headers {
        * = Content-Disposition: attachment
      }
    }
  }
  Extensions : StaticMimeTypes
}

MySQL {
  TypedResults = false
}

答案 1 :(得分:0)

这似乎是HHVM的一个错误。我在那个项目中添加了一张修复此问题的票据。