FPM / Nginx:无法打开主脚本

时间:2014-09-22 12:07:00

标签: nginx fastcgi php

我努力让NGINX和PHP-FPM有效对话。我的NGINX配置文件包含api偏移量的以下定义:

    location /api {
        try_files $uri /api/index.php$is_args$args;
        gzip    off;
        fastcgi_pass    PHP:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_keep_conn off; 
        include         fastcgi_params;
    }

在我的PHP机器上,我有以下池配置:

[api]
listen = 9000
user = www-data
group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.status_path = /status

然后,我点击NGINX服务器的日志文件,然后点击网络服务器:

http://localhost/api
# or 
http://localhost/api/index.php
# or ...
http://localhost/api/resources.json

我可以从NGINX服务器日志中看到NGINX正确匹配/api模式,但是我收到以下错误:

  

[error] 14#0:* 1 stderr发送的FastCGI:"无法打开主脚本:/app/html/websites/couchbase/api/index.php(没有这样的文件或目录)&# 34;

PHP计算机上的根目录是/app/html/websites/couchbase。我完全失去了这个错误的真正含义,或者更重要的是如何从这里调试它。任何帮助将不胜感激。

P.S。我已经尝试将fast_cgi_param中的$document_root引用替换为硬编码值,以查看它是否有所作为。从某种意义上说,如果我将它指向一个不正确的目录,它就会给我 No input file specified.错误。/app/html/websites/couchbase/api我得到错误的唯一地方是它似乎指向正确的地方。


添加了这个以防有助于澄清......这是PHP / FPM机器上test.php的文件系统。

filesystem

我创建了index.php文件,它基本上只是回应" Ok"回来,但这比运行test.php的主要目标更好。

  

注意:我不确定执行权限是否很重要 - 正如您所看到的{{1}}没有在图片中设置它们 - 但我已经尝试了两种方式并且它似乎没有任何区别。

1 个答案:

答案 0 :(得分:0)

错误是抱怨在根目录中找不到index.php文件。它位于...couchbase/api之下还是位于.../couchbase之下?在第二种情况下,您可以通过重定向解决此问题。

我认为您可以将try_files移到location区块之外。我从未在此类重定向中使用$is_args$args,但我没有对其进行测试,但恕我直言,我认为您可以删除它。

我认为您可以使用此配置解决此问题:

root /app/html/websites/couchbase;

try_files $uri /api/index.php$is_args$args;

location /api {
    rewrite /api/(.*) $1 break;
    gzip    off;
    fastcgi_pass    PHP:9000;
    fastcgi_index   index.php;
    fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_keep_conn off; 
    include         fastcgi_params;
}

如果您要包含以下指令,则可以使用更清晰的配置文件:

    fastcgi_index   index.php;
    fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_keep_conn off; 

fastcgi_params文件中。