Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
231 views
in Technique[技术] by (71.8m points)

nginx零拷贝配置与实现

背景: nginx开启零拷贝之后,可以跳过(内核缓冲区->用户态->socket缓冲区)这一个过程,减少用户态到内核态的切换。

配置:nginx

sendfile:on;

问题:在开启了nginx零拷贝后,php生成一个压缩文件后怎么返回给浏览器?告知nginx要下载的是哪个文件,需要配置head信息?

传统下载方式:

static function flushFile($filePath, $type, $fileSize, $name)
{

    $localFile = fopen($filePath, 'r');

    header("Content-Type: " . $type);
    header("Accept-Range: bytes");
    header("Content-Length: " . $fileSize);
    header('Content-Disposition: attachment; filename="'. $name.'"');

    $buffer = 1024;
    while (!feof($localFile)) {
        echo fread($localFile, $buffer);
    }
    fclose($localFile);

}

网上有看到一个用例是配置X-Accel-Redirect属性如:
static function flushFile($filePath, $type, $fileSize, $name)

{
    header("Content-Type: " . $type);
    header("Accept-Range: bytes");
    header("Content-Length: " . $fileSize);
    header('Content-Disposition: attachment; filename="'. $name.'"');

    header('X-Accel-Redirect: '. $filePath);

}

但是这样浏览器会报错,响应无效,官方文档也找不到X-Accel-Redirect的相关信息


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

已解决
官方文档地址 https://www.nginx.com/resourc...


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...