如何提供通过 nginx 中的 404 页面请求的媒体内容?
How to serve media content that is being requested through a 404 page in nginx?
我是 运行 一台 nginx 服务器,基本上只有一个空的 "image" 目录和一个 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);
希望您了解我正在尝试做什么以及问题到底是什么。否则我可以给你更多信息。
根据您的配置,我会尝试:
删除
error_page 404 /404.php;
并添加类似
的内容
location / {
try_files $uri /404.php?$args =404;
}
根据 documentation 的 error_page
总是 return 错误代码(可以强制状态代码)但总是 return 硬编码状态代码。 try_files
将查找该文件,如果找不到,请转到您的 404.php
,如果这不起作用,则 return 一个真正的 404
.
我是 运行 一台 nginx 服务器,基本上只有一个空的 "image" 目录和一个 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);
希望您了解我正在尝试做什么以及问题到底是什么。否则我可以给你更多信息。
根据您的配置,我会尝试:
删除
error_page 404 /404.php;
并添加类似
的内容location / {
try_files $uri /404.php?$args =404;
}
根据 documentation 的 error_page
总是 return 错误代码(可以强制状态代码)但总是 return 硬编码状态代码。 try_files
将查找该文件,如果找不到,请转到您的 404.php
,如果这不起作用,则 return 一个真正的 404
.