X-Accel-Redirect возобновляет прерванную загрузку

Я использую Nginx X-Accel-Redirect для обслуживания большого защищенного файла (несколько ГБ) для пользователей. Серверное приложение обрабатывает URL-адрес и проверяет токен загрузки (встроенный в URL-адрес) и запускает или отклоняет загрузку. Проблема в том, что загрузка не может быть возобновлена, если загрузка не удалась по какой-либо причине. Файл действительно большой, поэтому вероятность этого нельзя игнорировать.

Для получения дополнительной информации, сервер находится на AWS EC2, а файл находится в корзине S3. Это означает, что мы платим и за неудачную загрузку.

Я хочу знать, можно ли защитить файл с помощью токенов загрузки или других средств, чтобы пользователи не могли просто делиться ссылками для загрузки с другими, но по-прежнему может быть возобновлен в случае отключения сети.


Сервер python пересылает следующие заголовки в Nginx.

content_type='application/force-download'
Content-Disposition='attachment; filename=xxx'
X-Accel-Redirect=<url>

Конфигурация Nginx выглядит следующим образом.

location ~ ^/protected/(.*) {
    internal;
    resolver 8.8.8.8;
    resolver_timeout 60;
    proxy_hide_header Content-Type; # To hide header from S3
    proxy_hide_header x-amz-id-2;
    proxy_hide_header x-amz-request-id;
    proxy_set_header Content-Type 'application/force-download';
    proxy_max_temp_file_size 0;
    proxy_pass https://***.amazonaws.com/***/$1;
}
0
задан 8 March 2019 в 15:20
1 ответ

Похоже, вы проксируете запросы к S3, а не обслуживаете предварительноподписанные URL-адреса с обычным перенаправлением (например, 303), а не с X-Accel-Redirect, что обычно делается для создания устаревших ссылок.

В вашем случае я ожидаю, что Заголовок запроса диапазона удаляется. Убедитесь, что вы передаете заголовки запросов из браузера в S3 с помощью proxy_pass_request_headers on; в месте . Кроме того, вам, вероятно, не следует определять внутреннее для этого местоположения .

0
ответ дан 5 December 2019 в 03:50

Теги

Похожие вопросы