登录
首页 >  Golang >  Go问答

nginx零拷贝配置与实现

来源:SegmentFault

时间:2023-02-23 08:56:32 471浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《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的相关信息

正确答案

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

今天带大家了解了go、nginx、PHP、后端的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表