我有一个简单的脚本 cpuinfo.sh 可以工作并且可执行。
我收到错误
*224 FastCGI 在 stderr 中发送:“无法获取脚本名称,DOCUMENT_ROOT 和 SCRIPT_NAME(或 SCRIPT_FILENAME)是否设置以及脚本可执行吗?” 从上游读取响应头时,客户端:86.44.146.39,服务器:staging.example.com,请求:“GET /cpuinfo.sh HTTP/1.1”,上游:“fastcgi://unix:/var/run/fcgiwrap.套接字:”,主机:“staging.example.com”
nginx 设置是
location ~ (\.cgi|\.py|\.sh|\.pl|\.lua)$ {
gzip off;
autoindex on;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT /home/balance/balance-infosystems-web/scripts/;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Run Code Online (Sandbox Code Playgroud)
我期待 fcgiwrap 执行
/home/balance/balance-infosystems-web/scripts/cpuinfo.sh
Run Code Online (Sandbox Code Playgroud)
我对脚本路径进行了硬编码以进行调试,但仍然遇到相同的错误。
location ~ (\.cgi|\.py|\.sh|\.pl|\.lua)$ {
gzip off;
autoindex on;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT /home/balance/balance-infosystems-web/scripts/;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /home/balance/balance-infosystems-web/scripts/cpuinfo.sh;
}
Run Code Online (Sandbox Code Playgroud)
需要更改 nginx 服务器配置中的哪些内容才能正确执行脚本?
小智 5
我有同样的问题。经过几个小时的错误方向搜索后,我终于找到了原因。事后看来,解决方案一直都在这里,就在上面,但我直到现在才意识到。
由于某种原因,在我的例子中 DOCUMENT_ROOT 的值为 /var/www/cgi-bin , SCRIPT_NAME 为 /cgi-bin/somescript.cgi 。因此,如果您以通常的方式将它们放在一起,通过编写 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name , SCRIPT_FILENAME 将设置为 /var/www/cgi-bin/cgi-bin/somescript.cgi ,这有点过头了,因此不会不工作。修复方法是输入: fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name
现在,如果 FastCGI 通过 fcgiwrap 在 error.log 中不知道变量是否已设置,而是告诉我它们设置了什么,我就会立即看到解决方案。诊断信息的黄金法则:具体且精确。
我只是在运行 printenv 脚本后才发现我在某个地方撒了谎,首先明确说明其 SCRIPT_FILENAME ,以便能够首先运行它。
| 归档时间: |
|
| 查看次数: |
12454 次 |
| 最近记录: |