首页 > 系统相关 >Nginx/PHP文件上传限制说明

Nginx/PHP文件上传限制说明

时间:2023-05-29 17:32:24浏览次数:43  
标签:限制 max Nginx timeout PHP 上传

0、背景说明

通过PHP程序上述文件时,是否有限制取决多个因素,注意这里表述的是“是否有限制”, 这里的限制不光是常认为的大小的限制 ,还有上传时间的限制。 另外除了PHP服务本身之外,一般也和 PHP 上层的 代理集群有关系,常见的代理集群是 Nginx/Openrestry

1、关于代理集群限制上传

代理集群这里以常用的 Nginx 为例介绍

1.1、client_max_body_size

默认为1M,可以配置在 http 或者 server 、location 中。

一般的建议是配置在 具体的server中,因为nginx支持多server,每个server的功能不同,对于如果有上传需求时,上传的大小限制也许也不一样。

1.2、client_body_timeout

默认值是60秒,需要注意的是这个参数的含义:

Nginx的 client_body_timeout控制的仅仅是 请求主体 body 的传输时间。

所以如果在上传大文件的时候,客户端配置超时时间大于60秒,且实际上传时间也超过了60秒,上传的请求并不会中断。

Nginx 会继续等待客户端发送请求的其余部分,即使超过了client_body_timeout的设置。

只有当整个请求完成或客户端关闭连接时,NGINX才会终止该请求

1.3、client_header_timeout

读取请求头的超时时间,默认为60秒,和上面 client_body_timeout 读取body体一样,仅读取 header头部的时间。

从上面三个参数知道,Nginx 侧实际限制文件上传时,只限制文件的大小,不限制文件上传的时长

如果要限制文件的时长:

1)通过后端服务,比如PHP的 max_execution_time

2)通过客户端ajax请求配置timeout超时

附加配置项说明:

● proxy_connect_timeout

Nginx转发到后端的请求无法被立即处理时,被放到Nginx的待处理池中等待被处理的时间,默认为60秒。

● proxy_read_timeout

Nginx请求被后端处理后。Nginx等待后端处理结果的等待时间,默认为60秒。也就是服务器的响应时间

● proxy_send_timeout

Nginx请求被后端处理后,后端把数据返回给Nginx的时间,默认60秒。

2、关于PHP上传文件限制

PHP侧限制文件上传,一共有三个参数共同决定

2.1、max_execution_time

页面最的长执行时间,默认为30秒。 即使页面上传时设置超时时间超过这个值,30秒之后也会中断请求,页面报错。

配置为0,表示不做时间限制

2.2、post_max_size

定义POST上传数据时最大可上传的大小,默认为2M。

如果实际POST过来的数据大于该值,则 $_POST和 $_FILES 这两个全局变量就为空值。

2.3、upload_max_filesize

定义上传文件时可接受的文件大小的最大值。默认为8M。这个根据实际业务场景配合Nginx进行调整

和文件上传有关的配置项说明:

● file_uploads = On 开启文件上传

● post_max_size = 50M 最大Post数据大小

● upload_max_filesize = 50M 最大上传文件大小

● upload_tmp_dir = '/tmp/phpupload' 上传时临时目录,默认为空,系统指定

● max_execution_time = 120 单个PHP脚本在服务器最大执行时间,单位为秒

● max_input_time = 120 PHP脚本从客户端接受请求数据的最大时间,这个时间包含了POST、GET和文件上传等数据

● memory_limit = 100M 单个PHP脚本能申请到的最大内存空间

3、前端配置的上传文件时间限制

一般是在ajax请求中设置timeout属性来设置上传的超时时间限制

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>测试超时响应</title>
    <script src="./js/jquery/jquery.js"></script>
  </head>
  <body>
    <button>发起超长时间请求</button>
    <script>
      document.querySelector('button').onclick = function() {
        $.ajax({
          url: 'http://127.0.0.1:8080/uploadBigFile',
          // 通过timeout属性设置超时,单位是毫秒
          timeout: 120000,
          error: function(err) {
            console.log(err)
          },
          success: function(res) {
            console.log(res)
          }
        })
      }
    </script>
  </body>
</html>

所以在排查完毕 Nginx、PHP服务本身确认上传限制都在合理的范围之内还有超时报错那么很大可能是 客户端做了 timeout 超时限制


今天的学习就分享都这里,感觉喜欢改分享的,可以关注个人微信公众号 搜 DailyJobOps 或者 全栈运维

Nginx/PHP文件上传限制说明_Nginx

DailyJobOps

标签:限制,max,Nginx,timeout,PHP,上传
From: https://blog.51cto.com/colinspace/6373236

相关文章

  • PHP 提取PDF文件内容
    这里以提取 亚马逊日期范围报告PDF汇总的数据根据路径下载PDF/***description:文件下载*@throwsCException*/publicfunctiongetFile($url,$save_dir='',$filename='',$type=0){if(trim($url)==''){......
  • Django与Postgres、Gunicorn和Nginx 容器化
    本文详细介绍了如何配置Django以在Docker上运行Postgres。对于生产环境,我们将添加Nginx和Gunicorn。我们还将了解如何通过Nginx提供Django静态和媒体文件。建立项目创建一个新的项目目录,然后开始Django项目:$mkdirdjango-on-docker&&cddjango-on-docker$mkdir......
  • catchAdmin+phpEmailer批量发邮件
    前端参数  后端逻辑//多个邮箱配置publicfunctionsystem(){$email_type=input('email_type','1');$field='id,smtp,smtp_port,sender_email_adress,smtp_name,smtp_code,encryption_type';$where[]=......
  • Docker php安装扩展步骤详解
    前言此篇,主要是演示docker-php-source,docker-php-ext-install,docker-php-enable-docker-configure这四个命令到底是用来干嘛的,它们在PHP容器中都做了哪些事情。很多人很不理解在Dockerfile中安装PHP扩展的时候总是出现这几个命令,本篇就就是为你揭开这些命令的神秘面纱而准......
  • 直播app开发搭建,Vue Element UI Upload 上传多张图片
    直播app开发搭建,VueElementUIUpload上传多张图片<template> <div>  <el-card>   <h1>轮播图-图片上传管理</h1>   <el-divider></el-divider>   <!--注意:使用:model="uploadImgForm"不要使用v-model="uploadImgForm&q......
  • 如何将word公式粘贴到PHPCMS里面
    ​ 自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了。一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器)中时,编辑器都无法自动上传图片。需要用户手动一张张上传Word图片。如果只有一张图片还能够接......
  • [nginx]lua控制响应头
    前言适用场景:添加CDN缓存时间、操作set-cookie、标记业务数据类型等。获取响应头指令:ngx.resp.get_headers语法:headers=ngx.resp.get_headers(max_headers?,raw?)环境:set_by_lua*、rewrite_by_lua*、access_by_lua*、content_by_lua*、header_filter_by_lua*、body_filter......
  • 大文件切片上传
     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>切片上传</title></head><body><scriptsrc="https://cdn.bootcdn.net/ajax/libs/spark-md5/3.0.2/spark-m......
  • Nginx 如何预防网络爬虫?
    网络爬虫是一种自动获取网页信息并进行处理的程序。爬虫通过访问指定的URL地址,对返回的HTML或其他类型响应数据进行解析、提取所需的数据或信息,并存储到本地或其他指定位置。通常可以用于搜索引擎的抓取、数据挖掘、信息聚合等领域。为了预防网络爬虫,Nginx可以采取以下措施......
  • nginx,gateway配置
    反向代理:监听192.168.10.129:9001如果url中有edu就把请求转发给http://ip1:port1,如果url中有vod就把请求转发给http://ip2:port2nginx配置:server{listen9001;server_name192.168.10.129;location~/edu/{proxy_passhttp://ip1:port1}location~/vod/{proxy_passhtt......