Рейтинг:2

Загрузка больших файлов с собственного веб-сайта

флаг cn

Извините, если вопрос простой, я новичок в веб-разработке и самостоятельных серверах.

У нас есть собственный веб-сайт, на котором должна быть кнопка для загрузки большого zip-файла (1 ГБ). Для этого у нас есть простое решение в index.html файл:

<form action="path/to/file.zip" style="display: inline;">
    <button type="submit" class="btn btn-light">DOWNLOAD</button>
</form>

Обычно это работало нормально. Проблема в том, что всякий раз, когда несколько посетителей пытаются загрузить файл одновременно, на сервере заканчивается оперативная память, и веб-сайт падает. Это связано с тем, что каждый раз, когда кто-то нажимает кнопку загрузки, файл загружается в ОЗУ в течение всего процесса загрузки. Когда несколько посетителей нажимают кнопку «Загрузить», файл загружается в ОЗУ несколько раз. В качестве дополнительной информации, веб-сайт построен на python + Flask, а сервер имеет 12 ГБ оперативной памяти.

Я видел это в этом ответе (Как остановить Apache от сбоя всего моего сервера?) они предлагают «разгрузить Apache для длительных процессов», но я не уверен, как этого добиться. Есть ли какое-либо решение, которое вы можете предложить для решения этой проблемы?

Заранее большое спасибо.

флаг vn
Подумайте о том, чтобы разместить файл где-нибудь за пределами сервера, например на Amazon S3.
флаг br
Это звучит не совсем правильно - какой реальный движок веб-сервера вы используете?
djdomi avatar
флаг za
даже файл файла будет иметь размер 50 ГБ или больше, он должен передавать его вместо открытия
флаг vn
@ Chopper3 Готов поспорить, что запросы проходят через передний контроллер приложения, а не напрямую на веб-сервер.
eugenio_chisari avatar
флаг cn
@Chopper3 мы используем Nginx. @djdomi не могли бы вы указать мне какой-нибудь ресурс, объясняющий, как это сделать? Спасибо вам всем.
djdomi avatar
флаг za
@eugenio_chisati, если вы используете plane nginx, опубликуйте конфиг nginx, это ненормальное поведение для nginx, вы можете попробовать использовать `directio 50m`, чтобы проверить, работает ли все еще ooom
eugenio_chisari avatar
флаг cn
Привет всем, большое спасибо за ваши отзывы, мне было очень полезно иметь возможность задавать правильные вопросы и находить ответы. Оказывается, наш сервер nginx просто перенаправлял запросы с публичного адреса на локальный адрес на нашем сервере; тогда приложение фактически использовало веб-сервер Tornado. Таким образом, решение состояло в том, чтобы просто использовать nginx напрямую для обслуживания статических файлов и пересылать на сервер торнадо только нестатическую часть. Это решило проблему с памятью. Еще раз спасибо за помощь и за то, что терпите мои вопросы новичка :)
Рейтинг:1
флаг cn

Большое спасибо за ваш отзыв, мне было очень полезно иметь возможность задавать правильные вопросы и находить ответы.

Оказывается, наш сервер nginx просто перенаправлял запросы с публичного адреса на локальный адрес на нашем сервере; тогда приложение фактически использовало веб-сервер Tornado. Таким образом, решение состояло в том, чтобы просто использовать nginx напрямую для обслуживания статических файлов и пересылать на сервер торнадо только нестатическую часть. Это решило проблему с памятью.

Еще раз спасибо за помощь и за то, что терпите мои вопросы новичка :)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.