Nginx + PHP 8.0支持视频上传

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

1. Nginx 配置

1.1 增加上传文件大小限制

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

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

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

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

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

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

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

nginx 复制代码
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),找到并修改以下参数:

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

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

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

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

ini 复制代码
memory_limit = 512M         # 设置脚本可使用的最大内存为512MB

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

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

nginx 复制代码
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 服务以使配置生效:

bash 复制代码
sudo systemctl restart nginx
sudo systemctl restart php8.0-fpm

5. 检查上传目录权限

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

bash 复制代码
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 相关的参数:

nginx 复制代码
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 下的大文件传输:

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

3. 优化 HTTPS 下的超时时间

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

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

4. 启用 HTTP/2(可选)

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

nginx 复制代码
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 服务:

bash 复制代码
sudo systemctl restart nginx
sudo systemctl restart php8.0-fpm

总结

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

相关推荐
Avan_菜菜16 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
两个人的幸福3 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
ping某5 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
BingoGo5 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack5 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982076 天前
PHP 扩展——从入门到理解
php
鹏仔先生7 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php