解决nginx无法下载大文件,解决open()failed 问题

解决open()failed (13: Permission denied) while reading upstream的问题

前言:

[[email protected] nginx]# ps -ef|grep nginx
root      1686     1  0  2018 ?        00:00:00 nginx: master process /xxdata/nginx/sbin/nginx
nginx     5443  5442  0  2018 ?        00:00:33 php-fpm: pool www
nginx     5444  5442  0  2018 ?        00:00:34 php-fpm: pool www
nginx    17130  1686  0 15:19 ?        00:00:00 nginx: worker process
root     17517 17228  0 15:31 pts/4    00:00:00 grep --color=auto nginx

出现问题:
网站页面出现异常,无法下载大文件。

查看nginx的error.log日志

2019/01/27 15:18:30 [crit] 23475#0: *39947969 open() "/xxdata/nginx/proxy_temp/4/44/0000200444" failed (13: Permission denied) while reading upstream, client: 110.70.240.98, server: api.xuexintest.com, request: "GET /training-srv/jy/report/downLoad/273e658b-d6a9-45ad-bdf5-893fcd261700?fileType=0&kd=1&zt=1&fx=1&jd=1&dp=1&ly=1&kdkp=1&subjectCode=chemistry&xnID=sjl HTTP/1.1", upstream: "http://10.17.16.104:1300/training-srv/jy/report/downLoad/273e658b-d6a9-45ad-bdf5-893fcd261700?fileType=0&kd=1&zt=1&fx=1&jd=1&dp=1&ly=1&kdkp=1&subjectCode=chemistry&xnID=sjl", host: "ai.test.com"

分析问题及解决方法:
分析问题:
出错原因是work进程没有打开/xxdata/nginx/proxy_temp/4/03/0000000034 文件的权限。work进程属于nginx用户组,nginx用户名。因此只要把proxy_temp 目录权限赋给nginx用户组,nginx用户名就可以了。
解决问题:

[[email protected] nginx]# chown -R nginx:nginx ./proxy_temp/
  [[email protected] nginx]# ll proxy_temp/
 total 40
drwx------ 102 nginx nginx 4096 Mar  9  2016 0
drwx------ 102 nginx nginx 4096 Mar  9  2016 1
drwx------ 102 nginx nginx 4096 Mar  9  2016 2
drwx------ 102 nginx nginx 4096 Mar  9  2016 3
drwx------ 102 nginx nginx 4096 Mar  9  2016 4
drwx------ 102 nginx nginx 4096 Mar  9  2016 5
drwx------ 102 nginx nginx 4096 Mar  9  2016 6
drwx------ 102 nginx nginx 4096 Mar  9  2016 7
drwx------ 102 nginx nginx 4096 Mar  9  2016 8
drwx------ 102 nginx nginx 4096 Mar  9  2016 9

原文地址:http://blog.51cto.com/13922718/2347047

时间: 2024-08-05 11:29:05

解决nginx无法下载大文件,解决open()failed 问题的相关文章

转(Response.WriteFile 无法下载大文件解决方法)

以前用Response.WriteFile(filename),但当遇到大文件时无法完整下载. 该方法最大的问题,它不是直接将数据抛到客户端,而是在服务器端(IIS)上缓存.当下载文件比较大时,服务器压力会很大,iis虽然支持2G大小的文件下载,但当文件上了很多M时,由于服务器以及网络等因素的影响,异常概率相当大.所以当需要下载大文件时就不能使用上面的方法了. 微软推荐以下方法代替之: ■将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据. ■为用户提供用于下载文件的链接. ■

如何解决nginx上传大文件的限制

通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题: 用nginx来做webserver的时,上传大文件时需要特别注意client_max_body_size这个参数,否则会中断在nginx的请求中,在php中是无法记录到访问的. 一般上传大文件流程: 首先修改php.ini文件: file_uploads on 是否允许通过HTTP上传文件的开关.默认为ON即是开 upload_tmp_dir – 文件上传至服务器上存储临时文件的地方,如果没指定

利用php CI force_download($filename, $data) 下载.csv 文件解决文件名乱码,文件内容乱码

利用php CI force_download($filename, $data) 下载.csv 文件解决文件名乱码,文件内容乱码.做了很久终于知道了很好的解决方案. 1.加载辅助函数 $this->load->helper('download'); //下载辅助函数 $this->load->helper('string'); //字符编码转换辅助翻书 2.force_download($filename, $data)通过它的代码可以知道$data 必须是字符串,如果不是字符串

在ASP.NET中支持断点续传下载大文件(ZT)

IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag         客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传的下载: Accept-Ranges:告知下载客户端这是一个可以恢复续传的下载,存放本次下载的开始字节位置.文件的字节大小: ETag:保存文件的唯一标识(我在用的文件名+文件最后修改时间,以便续传请求时对文件进行

[libcurl]_[0基础]_[使用libcurl下载大文件]

场景: 1. 在Windows编程时, 下载http页面(html,xml)能够使用winhttp库,可是并非非常下载文件,由于会失败. 由此引出了WinINet库,无奈这个库的稳定性比較低,使用样例又少, 下载大文件时常常是不完整,可查找的资料非常少或者是没有特殊情况的解决的方法. 2. 我的原则是假设系统有自带的就用系统的,可是 WinINet 要掌握须要花不少时间. 时间因素考虑到了libcurl. 3. libcurl支持ftp,http等协议的文件读取,还能自己主动获取文件大小, 最重

[libcurl]_[初级]_[使用libcurl下载大文件]

场景: 1. 在Windows编程时, 下载http页面(html,xml)可以使用winhttp库,但是并不是很下载文件,因为会失败. 由此引出了WinINet库,无奈这个库的稳定性比较低,使用例子又少, 下载大文件时经常是不完整,可查找的资料很少或者是没有特殊情况的解决办法. 2. 我的原则是如果系统有自带的就用系统的,但是 WinINet 要掌握需要花不少时间. 时间因素考虑到了libcurl. 3. libcurl支持ftp,http等协议的文件读取,还能自动获取文件大小, 最重要的是不

下载大文件时OutofMemoryException

有一个大文件下载的问题,这两天查了一下,主要原因有两个: 发送的Get请求中,没有设置HttpCompletionOption这个参数,当下载大文件的时候,会等到response body中的数据全部加载完才开始下载.现在已经改成了HttpCompletionOption.ResponseHeadersRead,这样只要head加载完就可以开始下载 下载的时候使用FileStreamResult File(Stream fileStream, string contentType, string

解除百度云浏览器端对下载大文件的限制

百度网盘对浏览器端下载大文件做了一些限制,当超过一定大小的文件必须使用百度云管家才可以下载,这给用户的使用带来了不便. [不看分析请直接拉到页底] 1. 百度网盘限速原理 当点击下载一个大文件的时候百度网盘会弹出这样一个提示框. 我们给下个断点,看看是什么代码创建了这个提示框. 然后再次点击下载一个大文件,我们发现断点已经断下来了. 可以看出这里是在把提示对话框显示出来,我们需要查看调用栈往上找找. 跳过一些jQuery的操作,我们看到了这样一个函数,继续往上找. 这个isPlatformWin

ASP.Net 下载大文件的实现 (转)

原文:http://www.cnblogs.com/luisliu/p/4253815.html 当我们的网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 1. 将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据. 2. 根据下载的文件类型来指定 Response.ContentType .(这个网址可以找到大部分文件类型的对照表:http://tool.oschina.ne