首页 > 解决方案 > 如何提供通过 nginx 中的 404 页面请求的媒体内容?

问题描述

我正在运行一个 nginx 服务器,它基本上有一个空的“图像”目录和一个 404.php 脚本。

每次用户从 nginx 服务器请求图像时,例如“www.example.com/image/12312.png”,nginx 服务器都会从 s3 下载图像,将其存储在该特定名称下并提供服务。然后,下次请求相同的图像时,不再需要下载它,因为它已经在服务器上(因此不再触发 404 脚本,这意味着它直接提供图像)。


我希望你了解基本情况。它本质上是镜像媒体内容并立即提供服务。现在,粗体部分目前是我无法弄清楚如何解决的问题 - 除了该部分之外的其他所有内容都可以完美运行!

我假设这是因为 nginx 服务器沿图片发送了 404 回复,这使得它不显示图片。我必须让访问者在第一次请求文件时重新加载页面,这很麻烦。

你知道我该如何解决这个问题吗?


这是我当前以伪代码显示图像(或本例中的视频)的代码:

404.php

// Get requested file
$requestedFile = $_SERVER["REQUEST_URI"];
$localFile = $requestedFile
$remoteFile = "s3.example.com/".$requestedFile

// Download and store file from s3
file_put_contents($remoteFile, $localFile);

// Serve the stored file
// THIS PART IS WHERE I ENCOUNTER PROBLEMS - THE VIDEO IS NOT BEING DISPLAYED!
header('Content-Type: video/mp4');
header('Accept-Ranges: bytes');
header('Content-Length:'.filesize($localFile));
readfile($localFile);

希望您了解我要做什么以及问题到底是什么。否则我可以给你更多的信息。

标签: phpnginxvideomedia

解决方案


根据您的配置,我会尝试:

移除

error_page 404 /404.php;

并添加类似的东西

location / {
        try_files $uri /404.php?$args =404;
}

根据文档error_page始终返回该错误代码(可以强制状态代码),但始终返回硬编码的状态代码。将查找该文件,然后如果找不到,则转到您的then 如果这不起作用将返回一个 true 。try_files404.php404


推荐阅读