【问题标题】:simple phar file causes redirect loop in nginx简单的 phar 文件导致 nginx 中的重定向循环
【发布时间】:2015-03-02 15:43:32
【问题描述】:

我正在为内容管理系统创建一个基于 Web 的 phar 安装程序。问题出在 nginx 服务器上,即使是最简单的 phar 文件也会在 nginx 中导致重定向。在 apache 中一切正常。

我对 nginx 的经验很少,所以我无法弄清楚。寻找所有,以及我能得到的任何帮助。提前致谢。

来源:

这是 .phar 的构建脚本(我将 .phar 重命名为 .php,因此不需要时髦的 .htaccess 规则)

<?php
// create with alias "project.phar"
$phar = new Phar('test.phar', 0, 'test.phar');
$phar->buildFromDirectory('./files');
$phar->setStub($phar->createDefaultStub('cli.php', 'index.php'));
@rename('test.phar','test.php');
?>

这里是简单的 index.php 文件

<?php
echo "This does not work in nginx\n";
?>

这里是nginx配置:

server {
    listen 0.0.0.0:80;
    root /var/www/;
    index index.html index.php;

    include /etc/nginx/include/php;

    location /test2 {
        autoindex on;
    }
}

和 /etc/nginx/include/php 文件

include /etc/nginx/fastcgi_params;
location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    set $path_info $fastcgi_path_info;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    try_files $fastcgi_script_name =404;

    fastcgi_pass unix:/var/run/nginx/php-fastcgi.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

和 fastcgi_params 文件

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

编辑

这个问题与 fastcgi 模式有关,因为我在 apache 中使用相同的处理程序重现了它。 默认存根会导致重定向循环,要求我使用固定存根。我将发布另一个问题

【问题讨论】:

  • phar 文件不会被 fastcgi 处理,直到您将其添加到 location 模式 [^/]\.(php|phar)(/|$)fastcgi_split_path_info ^(.+?\.(?:php|phar))(/.*)$; 但我不确定 $fastcgi_path_info 是否会在此填充案例。
  • 文件被重命名为 test.php 来解决这个问题。我得到了一个重定向循环。
  • 您重命名导致循环。我认为您应该尝试在本地创建文件,然后使用正确的 MIME 类型发出 ajax 下载请求。

标签: php nginx phar


【解决方案1】:

我自己也看到过这样的重定向循环并报告了这个错误 - https://bugs.php.net/bug.php?id=67587

该错误已在 PHP 中得到修复; PHP 5.6.0、5.5.15 和 5.4.31。

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 2015-04-19
    • 2019-04-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多