DJANGO技巧两则:模拟MKDIR -P及配合NGINX上传大文件不使超时

简介:

这都是在开发当哪遇到的问题,网上转转,作个记录:

http://blog.chinaunix.net/uid-25525723-id-1596574.html

http://bookshadow.com/weblog/2014/10/02/python-mkdir-p/

 

复制代码
def mkdir_p(path):
    try:
        os.makedirs(path)
    except OSError as exc:  # Python >2.5 (except OSError, exc: for Python <2.5)
        if exc.errno == errno.EEXIST and os.path.isdir(path):
            pass
        else:
            raise
复制代码
我的配置是:nginx+uwsgi+django来上传的。
配置文件修改成如下:
  1. server {
  2.         listen 8080;
  3.         client_header_buffer_size 40890k;
  4.         client_max_body_size 500m;
  5.         client_body_buffer_size 80240k;
  6.         location / {
  7.             uwsgi_pass 127.0.0.1:10000;
  8.             include uwsgi_params;
  9.             proxy_send_timeout 300;
  10.             proxy_read_timeout 300;
  11.             proxy_buffer_size 512k;
  12.             proxy_buffers 64 128k;
  13.             proxy_busy_buffers_size 1024k;
  14.             proxy_temp_file_write_size 512k;
  15.             proxy_connect_timeout 30s;
  16.             access_log off;
  17.         }
  18.         location ^~ /site_media {
  19.                 root /home/xxxxxx/xxxxxx;
  20.         }
  21.         location ~* ^.+\.(mpg|avi|mp3|swf|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt|tar|mid|midi|wav|rtf|mpeg)$ {
  22.             root /xxx/xxx/xxxxx/site_media;
  23.             expires 30d;
  24.             access_log off;
  25.         }
  26. }
要将proxy的这几个参数调整到比较大一些就行!要不然就会buffer不够用了。
 
 
附这几个参数的说明:
proxy_buffer_size

default: proxy_buffer_size 4k/8k

context: http, server, location

该指令设置缓冲区大小,从代理后端服务器取得的第一部分的响应内容,会放到这里.

小的响应header通常位于这部分响应内容里边.

默认来说,该缓冲区大小等于指令 proxy_buffers所设置的;但是,你可以把它设置得更小.
 
proxy_buffering 

syntax: proxy_buffering on|off

default: proxy_buffering on

context: http, server, location

该指令开启从后端被代理服务器的响应内容缓冲.

如果缓冲区开启,nginx假定被代理的后端服务器会以最快速度响应,并把内容保存在由指令proxy_buffer_size 和 proxy_buffers指定的缓冲区里边.

如果响应内容无法放在内存里边,那么部分内容会被写到磁盘上.

如果缓冲区被关闭了,那么响应内容会按照获取内容的多少立刻同步传送到客户端

nginx不尝试计算被代理服务器整个响应内容的大小,nginx能从服务器接受的最大数据,是由指令proxy_buffer_size指定的.

对于基于长轮询(long-polling)的Comet 应用来说,关闭 proxy_buffering 是重要的,不然异步响应将被缓存导致Comet无法工作 

 
proxy_buffers

语法: proxy_buffers the_number is_size;

默认值: proxy_buffers 8 4k/8k;

上下文: http, server, location

该指令设置缓冲区的大小和数量,从被代理的后端服务器取得的响应内容,会放置到这里. 默认情况下,一个缓冲区的大小等于内存页面大小,可能是4K也可能是8K,这取决于平台
 
proxy_connect_timeout
上下文: http, server, location 该参数定义了跟代理服务器连接的超时时间,必须留意这个time out时间不能超过75秒. 这并不是服务器开始返回页面的时间(这是proxy_read_timeout的定义).如果upstream服务器在线,但是挂死(比如,它暂时没有足够的进程去处理你的请求,先放在连接池里边等待处理),这时这个参数无法帮助你,因为跟服务器的连接已经建立了. 
 
proxy_max_temp_file_size

语法: proxy_max_temp_file_size size;

默认值: proxy_max_temp_file_size 1G;

上下文: http, server, location, if

Available since: 0.1.8

TODO: Description.
目录
相关文章
|
3月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
|
3月前
|
中间件 应用服务中间件 nginx
Nginx+uWSGI+Django原理
Nginx+uWSGI+Django原理
|
3月前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
215 0
|
4月前
|
Python
django下载文件4-4|
django下载文件4-4|
|
3月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
186 0
|
5月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
77 2
|
5月前
|
JavaScript 应用服务中间件 PHP
nginx server 禁止特定目录下的某类文件访问
【8月更文挑战第26天】这段Nginx配置代码旨在保护`/uploads/`目录下的文件,禁止执行任何`.php`, `.html`, `.htm`, 或 `.js`等潜在有害文件,即便被访问也无法运行。取而代之的是重定向到首页。为了实现这一设置,用户需要定位到对应子域名的`.conf`配置文件中进行相应修改。若网站支持多个访问域名,则需确保在正确的`.conf`文件中实施此配置。
119 1
|
5月前
|
存储 监控 应用服务中间件
查看nginx日志文件
器性能和提高网站可用性。掌握日志文件的路径、查看方法和基本分析技能对于任何服务器管理员来说都是必备技能。
207 1
|
5月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
|
5月前
|
关系型数据库 应用服务中间件 数据库
如何安装和配置 Django 与 Postgres、Nginx 和 Gunicorn
如何安装和配置 Django 与 Postgres、Nginx 和 Gunicorn
57 0