nginx и отдача больших файлов

Есть связка nginx и apache. Всё вроде хорошо, пока дело не касается больших файлов (500мб+)
Гугление показало, что обычно это решается размещением файла локально на сервере с nginx, но как быть, если сервер с nginx и с apache — это разные сервера? Понятно, что nfs тут решает, но это как-то костыльно. Возможно ли заставить nginx выдавать поток напрямую из apache?
  • Вопрос задан
  • 7305 просмотров
Пригласить эксперта
Ответы на вопрос 10
akalend
@akalend
программирую
и еще один совет: выкинь аппач на…
nginx умеет работать со всеми языками, с которыми работает аппач
Ответ написан
anycolor
@anycolor
Что мешает там где стоит апач — поставить nginx и отдавать файл напрямую с него?
Ответ написан
darkdimius
@darkdimius
Обратите внимание на такую фину nginx как XSendfile.
Вы можете расположить файл только на nginx-е, и апачем говорить «отдай его».
Ответ написан
Комментировать
KawaiDesu
@KawaiDesu
Что подразумевается под «поток из apache»?
В принципе, если отдача идёт не из пхп (а если да, то это, имхо, ошибка при проектировании), то либо переносить статику на сервер с nginx, либо тот самый NFS.
Ответ написан
Комментировать
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
В сторону proxy_cache смотрите. Настройте его правильно.
Скорее всего, у вас большие файлы кэшируются. И так как на памяти у нас принято экономить — то кешируется она на диск. А вот тут вступает в действие самая плохая черта всех современных серверов — очень медленные диски.
Ответ написан
У меня стоит nginx и apache на одном сервере.
Работает по достаточно стандартной схеме: все запросы принимает nginx, а потом динамический контент передаёт дальше на apache через proxy_pass, а статический обрабатывает сам nginx.
Ответ написан
akalend
@akalend
программирую
>Возможно ли заставить nginx выдавать поток напрямую из apache?
nginx это и делает

1) не отдавай большие файлы из аппача через nginx, отдавай напрямую
2) храни большие файлы там — откуда ты их собираешься отдавать
если nginx и apache на разных серверах, то подними еще один nginx на том сервере, где лежит контент
3) если тебе нужно защитить каким-то образом доступ к файлам через скрипт — используй соответствующие модули: ngx_http_accesskey_module
4) если нужно сделать загрузку файла, то используй соответствующие модули: ngx_http_upload_module
Ответ написан
Комментировать
homm
@homm
Nginx должен отдавать огромные фалы напрямую с диска (даже если это nfs), это не имеет смысла обсуждать. Любая попытка отдавать энджиниксу большой файл чем-то еще (без разницы, чем) приводит к складыванию этого файла на диск во временную папку и отдачи уже оттуда.
Ответ написан
kotomyava
@kotomyava
Системный администратор
Настроить proxy_cache для статики. И она начнёт отдаваться со второго запроса с фронтэнда, без дополнительных ухищрений.
Ответ написан
Комментировать
@mafet Автор вопроса
Наконец дошли руки — в общем сделал всё по nfs и всё теперь отлично работает. Поднимать ещё один nginx — делать ещё один домен на каждом сайте и очень можно заморачиваться с логикой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы