当前位置: 首页 > news >正文

Nginx + PHP 8.0支持视频上传

在 Ubuntu 20.04 上配置 Nginx + PHP 8.0 的架构以支持视频上传,需要从 Nginx 和 PHP 两个方面进行配置,以确保服务器能够处理大文件上传。以下是详细的步骤:

1. Nginx 配置

1.1 增加上传文件大小限制

默认情况下,Nginx 对上传文件的大小有限制。你需要增加这个限制来允许上传更大的文件,例如视频文件:

http {...client_max_body_size 1G;  # 设置最大上传文件大小为1GB...
}
1.2 配置超时时间

上传大文件可能需要更多的时间,因此你需要增加相关的超时时间:

http {...client_body_timeout 120s;  # 设置上传超时时间为120秒send_timeout 120s;         # 设置发送超时时间为120秒keepalive_timeout 120s;    # 设置保持连接超时时间为120秒...
}
1.3 调整缓冲区大小

缓冲区的大小影响文件上传的性能,可以根据服务器的资源和文件大小调整这些缓冲区大小:

http {...client_body_buffer_size 256k;   # 调整请求体的缓冲区大小client_header_buffer_size 1k;   # 调整请求头的缓冲区大小large_client_header_buffers 4 32k; # 调整大请求头的缓冲区大小...
}
1.4 启用分块传输

对于非常大的文件,使用分块传输可以优化上传过程:

http {...chunked_transfer_encoding on;    # 启用分块传输编码...
}

2. PHP 配置

2.1 增加 upload_max_filesizepost_max_size

在 PHP 中,你需要配置 upload_max_filesizepost_max_size 来支持大文件上传:

打开 PHP 配置文件(通常位于 /etc/php/8.0/fpm/php.ini/etc/php/8.0/cli/php.ini),找到并修改以下参数:

upload_max_filesize = 1G   # 设置最大上传文件大小为1GB
post_max_size = 1G         # 设置最大POST数据大小为1GB
2.2 增加 max_execution_timemax_input_time

确保 PHP 脚本有足够的时间来处理上传的文件:

max_execution_time = 300    # 设置脚本最大执行时间为300秒
max_input_time = 300        # 设置输入数据的最大处理时间为300秒
2.3 增加 memory_limit

为了确保 PHP 有足够的内存来处理上传的大文件,你可以增加 memory_limit

memory_limit = 512M         # 设置脚本可使用的最大内存为512MB

3. Nginx 与 PHP-FPM 的连接配置

确保 Nginx 正确配置为使用 PHP-FPM 处理 PHP 请求。常见的配置示例:

server {listen 80;server_name example.com;root /var/www/html;index index.php index.html index.htm;location / {try_files $uri $uri/ /index.php?$query_string;}location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}location ~ /\.ht {deny all;}
}

4. 重启服务

在完成以上配置后,需要重启 Nginx 和 PHP-FPM 服务以使配置生效:

sudo systemctl restart nginx
sudo systemctl restart php8.0-fpm

5. 检查上传目录权限

确保上传的目录有适当的写入权限,以便 PHP 能够保存上传的文件:

sudo chown -R www-data:www-data /path/to/upload/directory
sudo chmod -R 755 /path/to/upload/directory

6. 测试上传功能

通过在你的项目中进行视频上传测试,确保一切工作正常。

**

在使用 HTTPS 的情况下,上述配置仍然有效,但你需要进行额外的配置来确保 HTTPS 环境下的上传和下载过程顺畅、安全。以下是需要注意的 HTTPS 相关配置:

**

1. SSL 证书配置

确保你的 Nginx 服务器已经配置了有效的 SSL 证书,并且 HTTPS 已正常工作。通常,你会在 Nginx 的配置文件中定义 SSL 相关的参数:

server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;...
}

2. 增加 HTTPS 的缓冲区大小

当使用 HTTPS 时,数据传输是加密的,可能会导致更高的资源消耗。你可以调整以下配置以优化 HTTPS 下的大文件传输:

server {...ssl_buffer_size 1400;  # 调整 SSL 缓冲区大小,适应较大文件传输...
}

3. 优化 HTTPS 下的超时时间

为了处理大文件上传,尤其是在 HTTPS 下,确保超时时间配置适当:

server {...client_body_timeout 120s;  # 上传超时时间send_timeout 120s;         # 发送超时时间keepalive_timeout 120s;    # 保持连接超时时间...
}

4. 启用 HTTP/2(可选)

HTTP/2 提供了更高效的数据传输方式,特别是在 HTTPS 下。你可以通过在 Nginx 配置中启用 HTTP/2 来优化上传和下载性能:

server {listen 443 ssl http2;  # 启用 HTTP/2 支持...
}

5. 确保上传配置仍然有效

上述与上传相关的配置(如 client_max_body_size 和 PHP 的 upload_max_filesize 等)在 HTTPS 环境下依然有效。你不需要修改这些配置,只需确保它们与 HTTPS 配置兼容。

6. 防火墙和安全配置

确保防火墙允许 HTTPS 流量(通常是 TCP 443 端口),并且没有限制可能影响上传的流量。你还可以启用 Nginx 的防火墙模块或其他安全措施以增强 HTTPS 上传的安全性。

7. 测试 HTTPS 下的视频上传

完成配置后,通过 HTTPS 测试你的上传功能,确保文件上传、传输速度和安全性都符合预期。

8. 重启服务

再次确认所有配置无误后,重启 Nginx 和 PHP-FPM 服务:

sudo systemctl restart nginx
sudo systemctl restart php8.0-fpm

总结

在 HTTPS 环境下,上述的上传配置仍然适用,你只需在 Nginx 中添加和优化 SSL 配置、考虑启用 HTTP/2 并确保其他 HTTPS 相关设置都适当配置。通过这些配置,服务器应该能够安全、高效地处理视频上传任务。

相关文章:

Nginx + PHP 8.0支持视频上传

在 Ubuntu 20.04 上配置 Nginx PHP 8.0 的架构以支持视频上传,需要从 Nginx 和 PHP 两个方面进行配置,以确保服务器能够处理大文件上传。以下是详细的步骤: 1. Nginx 配置 1.1 增加上传文件大小限制 默认情况下,Nginx 对上传文…...

MySQL基础详解(3)

文章目录 索引普通索引创建索引修改表结构(添加索引)创建表的时候直接指定删除索引的语法 唯一索引创建索引修改表结构创建表的时候直接指定 使用ALTER 命令添加和删除索引使用ALTER 命令添加和删除主键显示索引信息 约束非空约束:唯一约束:主键约束&…...

傅里叶变换结合数学形态学进行边缘增强和边缘提取

一、前言 傅里叶变换是图像变换的一种常用方法,傅里叶变换在图像处理中扮演着核心角色,它通过将图像从空间域转换到频率域,获取图像的频率成分,因为有些特征在空间域很难处理,但在频率域比较容易处理。这一转换有助于分…...

Haproxy的ACL介绍及应用实例

一、ACL介绍 访问控制列表ACL,Access Control Lists) 是一种基于包过滤的访问控制技术 它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配)即对接收到的报文进行匹配和过 滤,基于请求报文头部中的源地址、源端口、目标地址、目…...

final finally finalize 区别?

final: final 是一个修饰符,可以用于类、方法和变量。当final修饰类时,表示该类不能被继承。当final修饰方法时,表示该方法不能被子类覆盖(重写)。当final修饰变量时,表示该变量是一个常量,其值…...

C语言常用的内存函数

在上一篇博客中我为大家分享了一些常用的字符串函数,以及它们的用法和模拟实现。通过字符串函数中的strcpy,我们能够做到将一个字符串中的内容拷贝到另一个字符串上,可如果有一天我们想把一个整型数组中的内容拷贝到另一个整型数组中呢&#…...

MP4 H.264 MPEG-4 MPEG-2

MP4 视频编解码技术 H.264 MPEG-4 MPEG-2 MP4 (MPEG-4 Part 14): Format: A digital multimedia container format.Use: Often used to store video, audio, subtitles, and still images.Compression: Can use different codecs, such as H.264, for video compression. H.264…...

nvm 切换、安装 Node.js 版本

nvm下载路径 往下拉找到Assets 下载后,找到nvm-setup.exe双击,一直无脑下一步,即可安装成功。 配置环境变量(我的是window11) 打开任务栏设置–搜环境变量 配置好后,点确定一层一层关闭 windowR 打开控制…...

基于区块链的合同存证应用开发

基于区块链的合同存证应用开发 任务一:环境准备 1.启动区块链网络 目录: /root/xuperchain/output/ 启动区块链网络 bash constrol.sh start2.创建钱包账户 目录: /root/xuperchain/output/ 创建tenant, landlord钱包账户,命令如下: bin/xchain-cli account newke…...

每日一题~ abc 365 E 异或运算(拆位+贡献)

处理位运算常用的方法: 拆位法(一位一位的处理,通常题目中会给出元素的最大是2的的多少次幂,当然也有给10的次幂的,自己注意一下就可以了) 常用的思想 : 算贡献。 异或的性质: A^A0 …...

前端八股文笔记【三】

JavaScript 基础题型 1.JS的基本数据类型有哪些 基本数据类型:String,Number,Boolean,Nndefined,NULL,Symbol,Bigint 引用数据类型:object NaN是一个数值类型,但不是…...

AI学习记录 - transformer的Embedding层

创作不易,免费的赞 前面有介绍了GPT2如何进行token化的过程,现在讲下transformer的Embedding层 Embedding层就是一个巨大的矩阵,边长分别是词汇表长度和词向量维度,矩阵里面的每一个数字都是一个随机初始化的,或者是…...

23-PCB封装名称的统一添加与管理

1.进入封装管理器 2. 选择对象,点击右侧添加按钮 3. 搜索所需要的封装 4.接受创建变更 5.执行变更 6.关闭...

【Python从入门到进阶】62、Pandas中DataFrame对象案例实践

接上篇《61、Pandas中DataFrame对象的操作(二)》 上一篇我们讲解DataFrame对象的统计分析、可视化以及数据导出与保存相关内容。本篇我们延续之前学习的DataFrame对象的知识,结合一个数据案例进行实践操作。 一、案例说明 我们将通过一个股…...

使用Python实现深度学习模型:智能环境监测与预警

介绍 智能环境监测与预警是保护生态环境和人类健康的重要手段。通过深度学习技术,我们可以实时获取环境数据,分析环境变化趋势,及时发出预警。本文将介绍如何使用Python和深度学习库TensorFlow与Keras来构建一个简单的环境监测与预警模型。 环境准备 首先,我们需要安装必…...

ThreadLocal的使用场景是什么

ThreadLocal 是 Java 中用于实现线程局部变量的工具,它提供了每个线程独立的变量副本,使得不同线程对该变量的操作不会相互干扰。以下是 ThreadLocal 的常见使用场景: 线程安全的对象共享: ThreadLocal 可以用来避免线程间共享状…...

【网络爬虫篇】逆向实战—某东:滑块验证码(逆向登录)2024.8.7最新发布,包干货,包详细

【网络爬虫篇】更多优秀文章借鉴: 1. 使用Selenium实现黑马头条滑块自动登录 2. 使用多线程采集爬取豆瓣top250电影榜 3. 使用Scrapy爬取去哪儿网游记数据 4. 数据采集技术综合项目实战1:国家水稻网数据采集与分析 5. 数据采集技术综合项目实战2&#x…...

为什么优质的酱香白酒都会带点苦味?

大家好,我是酱酒亮哥,不知大家有没有发现,在制作一杯美味的咖啡或是烘焙一块香脆的面包时,制作过程中都会有一些独特的味道和香气产生,对吧?同样地,酱香白酒的酿造过程也是一个复杂而精细的化学…...

软件测试常见面试题

软件测试阶段分为单元测试,集成测试,系统测试,验收测试。单元测试策略为对代码中的函数方法进行测试,目的是发现代码的问题。集成测试策略是模块中组合起来进行测试,要求发现与接口有关的问题。系统测试策略是子系统的…...

面试经典算法150题系列-接雨水

接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析,分为​​已启动​​和​​未启动​​两种场景: 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​:当其他组件(如Activity、Service)通过ContentR…...

抽象类和接口(全)

一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...

【题解-洛谷】P10480 可达性统计

题目:P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M,接下来 M M M 行每行两个整数 x , y x,y x,y,表示从 …...

RKNN开发环境搭建2-RKNN Model Zoo 环境搭建

目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程.   本…...