当前位置: 首页 > 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 相关设置都适当配置。通过这些配置,服务器应该能够安全、高效地处理视频上传任务。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Golang | Leetcode Golang题解之第326题3的幂
  • SoildWorks练习清单
  • C++初学者指南-5.标准库(第二部分)--二叉堆操作
  • node 与 webhdfs 交互
  • IOC容器初始化流程
  • [大模型实战] DAMODEL云算力平台部署LLama3.1大语言模型
  • jmeter使用问题记录
  • 数据库篇--八股文学习第十九天| Redis的数据类型有哪些?;Redis是单线程的还是多线程的,为什么?;说一说Redis持久化机制有哪些
  • 2-61 基于matlab的光学干涉仿真系统
  • Nebula图数据库常用 nGQL命令
  • 《向量数据库指南》——选择、评估并优化索引
  • 谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存
  • CentOS 安装Redis
  • QMI8658 - 运动唤醒(WOM)功能 - Ⅳ
  • 汽车电子中间件概述
  • [ JavaScript ] 数据结构与算法 —— 链表
  • Android Studio:GIT提交项目到远程仓库
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • isset在php5.6-和php7.0+的一些差异
  • Laravel核心解读--Facades
  • PHP那些事儿
  • Vue UI框架库开发介绍
  • vuex 笔记整理
  • win10下安装mysql5.7
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 力扣(LeetCode)56
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端
  • 前嗅ForeSpider采集配置界面介绍
  • 首页查询功能的一次实现过程
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • MyCAT水平分库
  • 阿里云移动端播放器高级功能介绍
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #DBA杂记1
  • #define与typedef区别
  • #NOIP 2014# day.2 T2 寻找道路
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #大学#套接字
  • #数据结构 笔记一
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (C++)八皇后问题
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (python)数据结构---字典
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (学习日记)2024.01.19
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一) springboot详细介绍
  • ******之网络***——物理***
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET DataGridView数据绑定说明
  • .Net OpenCVSharp生成灰度图和二值图