【问题标题】:NGINX/PHP downloading instead of executingNGINX/PHP 下载而不是执行
【发布时间】:2011-12-30 22:43:18
【问题描述】:

我有一个运行 fastcgi/PHP 的 NGINX 服务器。我需要向其中添加用户目录,但我无法让 PHP 执行文件 - 它只是询问我是否要下载它。它可以在没有 userdir 的情况下工作(例如,它适用于 physibots.info/hugs.php,但不适用于 physibots.info/~kisses/hugs.php)。

配置:

server {
    listen      80;
    server_name physibots.info;
    access_log  /home/virtual/physibots.info/logs/access.log;

    root /home/virtual/physibots.info/public_html;

    location ~ ^/~(.+?)(/.*)?\.php$ {
        fastcgi_param SCRIPT_FILENAME /home/$1/public_html$fastcgi_script_name;
        fastcgi_pass unix:/tmp/php.socket;
    }

    location ~ ^/~(.+?)(/.*)?$ {
        alias /home/$1/public_html$2;
        autoindex on;
    }

    location ~ \.php$ {
        try_files $uri /error.html/$uri?null;
        fastcgi_pass unix:/tmp/php.socket;
    }
}

【问题讨论】:

  • 注意:我也试过没有第一个位置块,在第二个位置块中使用“fastcgi_param”行,完全没有它,它们都是有同样的效果。

标签: php nginx fastcgi


【解决方案1】:

原来它正在链接到 /home/foo/public_html/~foo。因此,从 /home/foo/public_html/~foo 返回到 /home/foo/public_html 的循环符号链接就像一个魅力。感谢您的所有帮助!

【讨论】:

    【解决方案2】:

    尝试将此行添加到 php 位置块:

    fastcgi_param  REDIRECT_STATUS    200;
    

    顺便说一句 - 你检查过php.socket 确实存在吗?

    【讨论】:

    • 它在服务器范围的 conf 文件中。而且,就像我说的那样,它非常适用于具有明确说明的主机名和根域的网站。
    • 针对physibots.info/~kisses/hugs.php 的请求,错误日志显示什么?只是一个猜测,但我认为这可能是您传递文件路径和脚本名称的方式的问题。
    • 它没有显示所请求的文件。错误日志中的唯一消息是关于缺少网站图标。此外,根据 php.ini 中的错误日志指令,PHP 在 syslog 中没有报告任何内容。
    • 你在使用 php-fpm 吗?如果是这样,请确保在 php-fpm.conf 中启用了 error_log
    【解决方案3】:

    我之前在另一台服务器上遇到过类似的问题。我的问题是脚本容器化<?。把所有这些都放在它之后(比如<?php)在它出现在脚本中的任何地方执行文件而不是下载它们。

    希望对您有所帮助。

    【讨论】:

    • 不,此脚本使用<?php ?> 结尾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2014-10-17
    • 2019-07-21
    • 2014-02-01
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多