NGINX - 未指定输入文件

时间:2017-09-03 23:46:49

标签: php nginx fastcgi

  

我想在发布这个问题之前让每个人都知道   stackoverflow上关于此问题的每个线程。

目标:

在一个域下运行两个应用,在根(/)上运行第一个应用,在URI(/ learn)下运行第二个应用。

http://example.com/ - first app
http://example.com/learn - second app

问题:

主应用程序运行正常,但学习应用程序显示“未指定输入文件”的白页。

我的文件结构:

/srv/users/serverpilot/apps/main/public/index.php
/srv/users/serverpilot/apps/learn/public/index.php

我的NGINX配置:

root "/srv/users/serverpilot/apps/main/public";

location ^~ /learn {
    root    "/srv/users/serverpilot/apps";
    try_files   $uri /learn/public/index.php?$query_string;
    location ~ \.php$ {
        add_header X-debug-message $document_root$fastcgi_script_name always;
        include       fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass  unix:/srv/users/serverpilot/run/learn.php-fpm.sock;
    }
}

location / {
    try_files     $uri $uri/ /index.php?$args;
    location ~ \.php$ {
        include       fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass  unix:/srv/users/serverpilot/run/main.php-fpm.sock;
        try_files     $uri =404;
    }
 }
  

此外:

     
      
  1. 我知道fastcgi_pass套接字正在工作,因为我去过   在不同的域下运行这两个应用程序但在同一个域中   有问题的服务器。
  2.   
  3. 我添加了 add_header X-debug-message $ document_root $ fastcgi_script_name“always; 以查看响应标头显示的内容,并显示   SCRIPT_FILENAME是   /srv/users/serverpilot/apps/learn/public/index.php存在并且是我正在尝试运行的确切文件。
  4.   

1 个答案:

答案 0 :(得分:2)

哦,啰嗦!多么狂野的狩猎!

好的,这个配置不起作用的原因是因为除了 fastcgi_params ,您还可以设置 php_value [doc_root] ,这将覆盖您的 $ document_root ,常用于 SCRIPT_FILENAME 参数。所以检查你的 php.ini 文件总是确保当你有来自不同目录的应用程序时没有设置 php_value [doc_root] ,否则它就不会捡起它们。如果您只是从单个目录提供单个应用程序,则无需担心。