我想在发布这个问题之前让每个人都知道 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;
}
}
此外:
- 我知道fastcgi_pass套接字正在工作,因为我去过 在不同的域下运行这两个应用程序但在同一个域中 有问题的服务器。
- 我添加了 add_header X-debug-message $ document_root $ fastcgi_script_name“always; 以查看响应标头显示的内容,并显示 SCRIPT_FILENAME是 /srv/users/serverpilot/apps/learn/public/index.php存在并且是我正在尝试运行的确切文件。
醇>
答案 0 :(得分:2)
好的,这个配置不起作用的原因是因为除了 fastcgi_params ,您还可以设置 php_value [doc_root] ,这将覆盖您的 $ document_root ,常用于 SCRIPT_FILENAME 参数。所以检查你的 php.ini 文件总是确保当你有来自不同目录的应用程序时没有设置 php_value [doc_root] ,否则它就不会捡起它们。如果您只是从单个目录提供单个应用程序,则无需担心。