URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6524
[ Назад ]

Исходное сообщение
"Upload больших файлов средствами HTTP"

Отправлено vasya_pupkin , 22-Сен-09 17:28 
Здравствуйте. Есть у меня web-сервер, на котором установлен:
frontend - nginx
backend - Apache 1.3.41 + mod_php
Необходимо организовать загрузку файлов размером 1Гб средствами HTTP. Писать приложение на уровне mod_php нерационально по одной простой причине, что Apache ляжет при большом количестве HTTP-запросов и их обработке. Соответственно вариант один: реализовать загрузку на уровне nginx и передавать Apache HTTP-сообщение с информацией о загруженном файле.
Существует даже модуль nginx-upload-module, всё бы хорошо, но проблема усложняется при внедрении аутентификации на уровне mod_php. Как работает этот модуль? Он получает HTTP-запрос с файлом в теле запроса; вырезает из тела файл, который кладёт во временный каталог; генерит новый HTTP-запрос с информацией о файле, который передаёт на указанный upload_pass бэкенду. А проблема в том, что при такой схеме, когда внедрена аутентификация на уровне mod_php(с использованием механизма сессий), nginx'у придётся аутентифицироваться для того чтобы передать HTTP-запрос Apache'у с информацией о временном файле, чего он не сумеет сделать. Вторая проблема: нельзя ограничить доступ к локации nginx, где указана загрузка файлов, а ограничивать необходимо по данным на базе которых предоставляет доступ к порталу. Соответственно любой желающий может отправить HTTP-запрос на nginx и загрузить файл.

Содержание

Сообщения в этом обсуждении
"Upload больших файлов средствами HTTP"
Отправлено Pahanivo , 22-Сен-09 18:16 
>[оверквотинг удален]
>аутентификации на уровне mod_php. Как работает этот модуль? Он получает HTTP-запрос
>с файлом в теле запроса; вырезает из тела файл, который кладёт
>во временный каталог; генерит новый HTTP-запрос с информацией о файле, который
>передаёт на указанный upload_pass бэкенду. А проблема в том, что при
>такой схеме, когда внедрена аутентификация на уровне mod_php(с использованием механизма сессий),
>nginx'у придётся аутентифицироваться для того чтобы передать HTTP-запрос Apache'у с информацией
>о временном файле, чего он не сумеет сделать. Вторая проблема: нельзя
>ограничить доступ к локации nginx, где указана загрузка файлов, а ограничивать
>необходимо по данным на базе которых предоставляет доступ к порталу. Соответственно
>любой желающий может отправить HTTP-запрос на nginx и загрузить файл.

а по фтп не проще?


"Upload больших файлов средствами HTTP"
Отправлено vasya_pupkin , 22-Сен-09 18:24 
>[оверквотинг удален]
>>во временный каталог; генерит новый HTTP-запрос с информацией о файле, который
>>передаёт на указанный upload_pass бэкенду. А проблема в том, что при
>>такой схеме, когда внедрена аутентификация на уровне mod_php(с использованием механизма сессий),
>>nginx'у придётся аутентифицироваться для того чтобы передать HTTP-запрос Apache'у с информацией
>>о временном файле, чего он не сумеет сделать. Вторая проблема: нельзя
>>ограничить доступ к локации nginx, где указана загрузка файлов, а ограничивать
>>необходимо по данным на базе которых предоставляет доступ к порталу. Соответственно
>>любой желающий может отправить HTTP-запрос на nginx и загрузить файл.
>
>а по фтп не проще?

Ну вы на youtube по ftp загружаете файл?
У меня видеохостинг для небольшого портала.


"Upload больших файлов средствами HTTP"
Отправлено Pahanivo , 23-Сен-09 07:01 
>[оверквотинг удален]
>>>nginx'у придётся аутентифицироваться для того чтобы передать HTTP-запрос Apache'у с информацией
>>>о временном файле, чего он не сумеет сделать. Вторая проблема: нельзя
>>>ограничить доступ к локации nginx, где указана загрузка файлов, а ограничивать
>>>необходимо по данным на базе которых предоставляет доступ к порталу. Соответственно
>>>любой желающий может отправить HTTP-запрос на nginx и загрузить файл.
>>
>>а по фтп не проще?
>
>Ну вы на youtube по ftp загружаете файл?
>У меня видеохостинг для небольшого портала.

вы на ютубе видели файлы такова размера?


"Upload больших файлов средствами HTTP"
Отправлено Slavaz , 22-Сен-09 19:17 
Как вариант - аплоадить ajax'ом, можно ещё и прогрессбарчик рисовать. У Гугля можно идею подсмотреть (да и, думаю, примеров помимо навалом).


"Upload больших файлов средствами HTTP"
Отправлено vasya_pupkin , 23-Сен-09 11:53 
>[оверквотинг удален]
>>>>ограничить доступ к локации nginx, где указана загрузка файлов, а ограничивать
>>>>необходимо по данным на базе которых предоставляет доступ к порталу. Соответственно
>>>>любой желающий может отправить HTTP-запрос на nginx и загрузить файл.
>>>
>>>а по фтп не проще?
>>
>>Ну вы на youtube по ftp загружаете файл?
>>У меня видеохостинг для небольшого портала.
>
>вы на ютубе видели файлы такова размера?

500Мб, если быть точным лимит загрузки будет

>Как вариант - аплоадить ajax'ом, можно ещё и прогрессбарчик рисовать. У Гугля
>можно идею подсмотреть (да и, думаю, примеров помимо навалом).

Вариант, но это не решает проблему нагрузки на backend, в моём случае Apache. У google свой мультиплексорный web-сервер скорее всего и вопрос нагрузки на backend у них не встаёт.