我在使用 web.py 提供静态文件时遇到了问题。它可以很好地提供我的所有 javascript/css/images,没有任何问题,但它对 PHP 文件返回 404。如果我直接访问 php 文件,它会给出“未指定输入文件”错误。
我确实在 nginx 上的虚拟主机中配置了 PHP 文件,但我想知道是否还必须在位置树的下方执行此操作?这是我当前针对 web.py 应用程序的 nginx 配置:
server {
listen 80;
server_name clearpoint.hyfiv.com;
error_log /home/clearpoint/http_error_log;
location / {
root /home/clearpoint;
index index.htm index.html index.php;
}
location /budget-calculator {
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/tmp/cpbc.socket;
}
location /budget-calculator/static {
alias /home/clearpoint/ClearPoint-Budget-Calc/static;
}
location /budget-calculator/static/scripts/php/~\.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/tmp/php.socket;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
正在构建的应用程序的测试服务器 URL:http://clearpoint.hyfiv.com/budget-calculator/
尝试访问 /scripts/php 目录时正如预期的那样返回了 403 forbidden,所以我认为问题不是它找不到文件,而是 nginx 没有将它们作为正确的 php 提供。
编辑:我重写了整个配置(上面已更改)。现在出现 405 错误,但这是进步。
再次编辑:如果我手动定义位置/块中脚本的位置,然后手动设置SCRIPT_FILENAME,则不会出现任何问题。
我认为我不当使用了 $fastcgi_script_name,但至少我有一个解决方法,同时根据别名要求确定最佳行动方案。
答案1
定义SCRIPT_FILENAME
于fastcgi_params
:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
并将您的配置文件更改为如下内容:
location /budget-calculator {
fastcgi_pass unix:/tmp/cpbc.socket;
include /etc/nginx/fastcgi_params;
location /budget-calculator/static {
alias /home/clearpoint/ClearPoint-Budget-Calc/static;
location ~ ^/budget-calculator/static/scripts/php/\.php$ {
fastcgi_pass unix:/tmp/php.socket;
}
}
}
请注意,您必须使用~
匹配正则表达式。