我努力让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
的文件系统。
我创建了index.php
文件,它基本上只是回应" Ok"回来,但这比运行test.php
的主要目标更好。
注意:我不确定执行权限是否很重要 - 正如您所看到的{{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
文件中。