我在Django
和Gunicorn
后面使用lighttpd
。从Gunicorn
文档开始,我将Lighttpd
配置为对Gunicorn
的反向代理:
$SERVER["socket"] == "0.0.0.0:80" {
server.document-root = "/home/user/app"
server.errorlog = "/var/log/lighttpd/app-error.log"
accesslog.filename = "/var/log/lighttpd/app-access.log"
$HTTP["url"] !~ "^/static/" {
proxy.server = (
"" => (
(
"host" => "127.0.0.1",
"port" => 8888,
"allow-x-send-file" => "enable"
)
)
)
}
}
到目前为止,一切正常,即使静态文件也可以正确提供。
现在,我正在尝试使用标题X-Sendfile
。在我的Django
代码中:
response['Content-Type'] = 'application/force-download'
response['Content-Disposition'] = f'attachment; filename={smart_str(send_name)}'
response['X-Sendfile'] = '/tmp/big-file.txt'
/tmp/big-file.txt
存在并且可以通过Lighttpd
进程访问。
每次我尝试以这种方式提供文件时,浏览器都会得到一个空响应。没有有效载荷和Content-Length: 0
。
我发现Lighttpd
哪里出了什么错(我认为Django
+ Gunicorn
部分都没错)。
我该怎么办?我的错误在哪里?
答案 0 :(得分:0)
在尝试设置X-Sendfile之前,请检查脚本是否尚未发送响应头。
您可以在lighttpd进程上使用strace来查看从后端收到的内容,以及lighttpd是否正在尝试打开'/tmp/big-file.txt'