Как обслуживать медиа-контент, который запрашивается через страницу 404 в nginx? - PullRequest
0 голосов
/ 22 мая 2018

Я использую сервер 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);

Надеюсь, вы понимаете, что я пытаюсь сделать, ив чем именно проблема.В противном случае я могу дать вам больше информации.

1 Ответ

0 голосов
/ 24 мая 2018

На основании ваших настроек я бы попробовал:

Удалить

error_page 404 /404.php;

и добавить что-то вроде

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

error_page в документации всегда возвращает этот код ошибки (может принудительно вызвать код состояния), но всегда возвращает жестко закодированный код состояния.try_files будет искать файл, затем, если он не найден, перейдите к вашему 404.php, а затем, если это не сработает, вернет значение 404.

...