Nginx 和 HHVM 总是 return 404

Nginx and HHVM always return a 404

我知道这不是一个罕见的问题,但不知何故我似乎无法找到直接的答案。有人能尽可能直接地回答这个问题吗?

我的 NGINX(传送静态文件)和 HHVM(hhvm index.php 来自控制台)工作正常,但我无法通过 NGINX 访问 .php一个 404

情况:
HHVM 3.5.0
Nginx 1.7.9

我的 /etc/nginx/conf.d/default.conf

中有这个
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /var/www;
        index  index.php index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    include hhvm.conf;
}

在HHVM.conf

location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

将下面的 HHVM conf 替换为您的:

location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

问题

我看到 $document_root$fastcgi_script_name 之间有一个 space。

更新 通过将 $document_root 更改为 /var/www

来解决

root 指令在 location 中定义,这就是为什么在 hhvm.conf 中无法通过变量 $document_root.

访问它的原因

应该直接移动到server层级:

server {
    listen       80;
    server_name  localhost;

    root   /var/www;

    location / {
        index  index.php index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    include hhvm.conf;
}

然后,您的 hhvm.conf 中不需要修改,尽管您可以 do some cleanup there too.