Nginx + WebPy 提供除 PHP 之外的所有静态文件吗?

Nginx + WebPy 提供除 PHP 之外的所有静态文件吗?

我在使用 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_FILENAMEfastcgi_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;
            }
        }
    }

请注意,您必须使用~匹配正则表达式。

相关内容