nginx限制上传大小和超时时间设置说明/php限制上传大小

2018-12-02 09:52:14


keepalive_timeout参数是一个请求完成之后还要保持连接多久,不是请求时间多久,目的是保持长连接,减少创建连接过程给系统带来的性能损耗,类似于线程池,数据库连接池。



现象说明:
在服务器上部署了一套后台环境,使用的是nginx反向代理tomcat架构,在后台里上传一个70M的视频文件,上传到一半就失效了!

原因是nginx配置里限制了上传文件的大小

client_max_body_size:这个参数的设置限制了上传文件的大小,可以在http、server、location三个区域里配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
[root@dev-huanqiu ~]# cat /Data/app/nginx/conf/nginx.conf
.......
.......
http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;   
 
    #######
    ## http setting
    #######
    sendfile       on;
    tcp_nopush     on;
    tcp_nodelay    on;
    keepalive_timeout  100;           #这个参数表示http连接超时时间,默认是65s。要是上传文件比较大,在规定时间内没有上传完成,就会自动断开连接!所以适当调大这个时间。         
    fastcgi_connect_timeout 6000;
    fastcgi_send_timeout 6000;
    fastcgi_read_timeout 6000;
    fastcgi_buffer_size 256k;
    fastcgi_buffers 8 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    ##
    client_header_timeout 120s;        #调大点
    client_body_timeout 120s;          #调大点
    client_max_body_size 100m;         #主要是这个参数,限制了上传文件大大小
    client_body_buffer_size 256k;   
 
    ## support more than 15 test environments
    server_names_hash_max_size 512;
    server_names_hash_bucket_size 128;
 
    gzip  on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 9;
    gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
    gzip_vary on;
 
[root@dev-huanqiu ~]#  cat /Data/app/nginx/conf/vhosts/admin.wangshibo.conf
server {
        listen       80;
 
        server_name  admin.wangshibo.com;
  
        #if ($http_x_forwarded_for !~ ^(14.165.97.54|123.110.186.128|123.110.186.68)) {
        #   rewrite ^.*$  /maintence.php last;
        #}
 
        access_log  /var/log/wangshibo.log  main;
  
       location   / {
          proxy_pass http://127.0.0.1:8484/;
          proxy_connect_timeout   300;         #这三个超时时间适量调大点      
          proxy_send_timeout      600;        
          proxy_read_timeout      600;
          proxy_set_header X-Real-IP $remote_addr;    # 获取客户端真实IP
          proxy_set_header REMOTE-HOST $remote_addr;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   # 获取代理者的真实ip
          proxy_set_header X-Forwarded-Scheme  $scheme;    # 解决getScheme,isSecure,sendRedirect
          proxy_buffer_size       32k;
          proxy_buffers           32 256k;
          proxy_busy_buffers_size 512k;
          proxy_temp_file_write_size 512k;
        }
 
      location   /static/video {
         root  /Data/app/tomcat-7-admin-wls/static/video;
        }
 
    ##end server

另外,tomcat的server.xml配置文件中的connectionTimeout超时时间也可以适当调大点,默认是20000,可以改成60000.

Nginx代理请求超时时间
可以参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout

====================================================================================

注意一点:
keepalive_timeout这个是nginx里关于http连接超时的一个设置,功能是使客户端到服务器端的连接在设定的时间内持续有效,当出现对服务器的后继请求时,该功能避免了建立或者重新建立连接。切记这个参数也不能设置过大!
因为客户端接口访问其实是一个比较快速的过程,访问完成了就不需要继续使用http连接了,如果将该参数值设置过大,就会导致接口访问完成后http连接并没有被释放掉,所以导致连接数越来越大,最终nginx崩溃!

如果http连接数过大时,超过了nginx里对于连接数的配置,比如“worker_connections 65535”,那么对应的nginx报错日志里会有信息:(socket() failed (24: Too many open files) while connecting to upstream)时不时的出现。

所以,要严格控制keepalive_timeout超时时间的设置,调大点的话,就会导致许多无效的http连接占据着nginx的连接数。

总之:
keepalive_timeout参数,对于提供静态内容的网站来说,这个功能通常是很有用的;
但是对于负担较重的网站来说,存在一个问题:虽然为客户保留打开的连接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,该功能对资源利用的影响尤其突出。

优点是:在请求大量小文件的时候,长连接的有效使用可以减少重建连接的开销.
缺点是:当长连接时间过长,比如60s,即使是浏览器没有任何请求,服务器仍然会维护着该浏览器的连接,一旦用户很多,对apache而言,就是需要维护大量的空闲进程.而对使用线程的轻量级web服务器如nginx,会由于超时时间过长而使资源无效占有而引发的损失,已超过了由于重复连接而造成的损失..

=======================================================================================
另外补充下php配置里对上传大小的限制:
打开php.ini 文件中,主要修改以下几个参数

;This sets the maximum amount of memory in bytes that a script is allowed to allocate
memory_limit = 32M
;The maximum size of an uploaded file.
upload_max_filesize = 8M
;Sets max size of post data allowed. This setting also affects file upload. To upload large files, this value must be larger than upload_max_filesize
post_max_size = 16M 


keepalive_timeout这个是nginx里关于http连接超时的一个设置,功能是使客户端到服务器端的连接在设定的时间内持续有效,当出现对服务器的后继请求时,该功能避免了建立或者重新建立连接。切记这个参数也不能设置过大!
因为客户端接口访问其实是一个比较快速的过程,访问完成了就不需要继续使用http连接了,如果将该参数值设置过大,就会导致接口访问完成后http连接并没有被释放掉,所以导致连接数越来越大,最终nginx崩溃!

  • 2019-05-21 12:37:34

    RecyclerView 刷新闪烁

    闪烁是 notifyDataSetChange 造成的。由于适配器不知道整个数据集中的哪些内容已经存在,在重新匹配 ViewHolder 时发生的。 当然,遇到这个问题时有去搜索一些答案,看到的很多都是去禁止 RecycleView 的默认动画,可惜这对我没什么用。下面的方法是对我有用的。

  • 2019-05-21 12:43:26

    (重要)RecycleView的缓存机制

    RecycleView的四级缓存是由三个类共同作用完成的,Recycler、RecycledViewPool和ViewCacheExtension。Recycler用于管理已经废弃或者与RecyclerView分离的ViewHolder,这里面有两个重要的成员,为可以看见的屏幕的内部缓存成员mAttachedScrap、mChangedScrap和滑出屏幕外的外部缓存成员mCachedViews二者共同完成ViewHolder的缓存;RecycledViewPool类是用来缓存整体所有的ViewHolder,是对mCachedViews缓存的补充;ViewCacheExtension是扩展内的缓存对象,默认不加载,需实现方法getViewForPositionAndType(Recycler recycler, int position, int type)来实现自己的缓存。接下来对四级缓存一步步介绍。

  • 2019-05-21 12:44:31

    对嵌套RecyclerView的优化

    RecyclerView 是一个更高级的 ListView ,它可以重用view避免额外创建太多的view从而带来流畅的滚动性能。RecyclerView通过叫做 View pool 的东西持有不再可见的 view ,让它可被回收

  • 2019-05-25 14:54:50

    commit your changes or stash them before you can merge

    Your local changes to the following files would be overwritten by merge:         protected/config/main.php Please, commit your changes or stash them before you can merge. --------------------- 作者:陈小峰_iefreer 来源:CSDN 原文:https://blog.csdn.net/iefreer/article/details/7679631 版权声明:本文为博主原创文章,转载请附上博文链接!

  • 2019-05-27 10:43:34

    IntelliJ IDEA中C盘文件过大怎么办

    当我在D:\ 安装完IDEA9.0之后,建立了一个工程,发现C:\Users\Administrator\.IntelliJIdea90 竟然增大到了500+M,并且随着使用在逐渐增大,这样占用系统盘资源是非常让人不爽的,那么如何将其修改到其他路径呢?

  • 2019-05-28 13:33:20

    BRVAH+MTRVA,复杂?不存在的

    言归正传,这样的一个首页,我们需要做怎么样的基础工作呢?或者说,碰到以后更复杂的页面我们应该怎么做?这里小提示下,不要再用什么类似ScrollView的这种东西了,诶,好像说的有点绝对,尽量不要用,这不是谷歌想要看到的,5.0谷歌推出了RecyclerView,从它的整个设计架构来看,简直就是为这而生的。而RecyclerView的视图是通过Adapter来渲染的。原始的Adapter,让人很蛋疼,重复工作太多,我们应该要有封装的思想,把最需要的部分提供出来,其它不用管。