Я использую 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;
}
Похоже, вы отправляете запросы на S3, а не обслуживаете предварительно подписанные URL с нормальный перенаправление (например, 303), а не X-Accel-Redirect, что обычно делается для создания устаревших ссылок.
В вашем случае я ожидаю, что заголовок запроса Range удаляется. Убедитесь, что вы передаете заголовки запроса из браузера в S3 с помощью proxy_pass_request_headers on;
в location
. Кроме того, вам, вероятно, не стоит internal
определены для этого location
.