IPB

Здравствуйте, гость ( Вход | Регистрация )

Важные объявления

 
Ответить в данную темуНачать новую тему
> apache + nginx и отдача файла на php
Ex3me
сообщение 16.1.2010, 20:14    [ Вставить ник в форму быстрого ответа ]
Сообщение #1


lamer...
****

Группа: Опытные
Сообщений: 401
Регистрация: 7.8.2007
Из: лесу
ICQ: 404554260
Пользователь №: 512
Спасибо сказали: 2 раз(а)

Дистрибутив:
Дома и на работе Ubuntu 9.10, Сервер FreeBSD 7.2, а нравится мне Arch



Репутация: -7


Ситуация: Стоит на сервере apache + nginx. Nginx отдает контент пользователю.

Вопрос: Если apache выполняет скрипт php в котором используется readfile() (считыет файл размером 10 мб), отдаст ли apache сразу контент nginx'у или apache будет выдавать nginx файл кусочками (если медленный канал у пользователя).

Примечание: создается впечатление, что apache по кускам считывает файл nginx, и при этом apache и nginx вдвоем обслуживают одного пользователя.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Зарегистрируйтесь, чтобы скрыть этот рекламный блок.
dip56245
сообщение 16.1.2010, 21:07    [ Вставить ник в форму быстрого ответа ]
Сообщение #2


Programmer
****

Группа: Старейшины
Сообщений: 481
Регистрация: 28.9.2005
ICQ: 82591163
Пользователь №: 2
Спасибо сказали: 2 раз(а)

Дистрибутив:
SuSE
Jabber ID:
dip56245@gmail.com



Репутация: 2


при таком размере будут оба обслуживать, можно попробовать поднять размер кеша на nginx'е, но лучше файл и т.п. отдавать самим nginx'ом, а не php...
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Ex3me
сообщение 16.1.2010, 21:27    [ Вставить ник в форму быстрого ответа ]
Сообщение #3


lamer...
****

Группа: Опытные
Сообщений: 401
Регистрация: 7.8.2007
Из: лесу
ICQ: 404554260
Пользователь №: 512
Спасибо сказали: 2 раз(а)

Дистрибутив:
Дома и на работе Ubuntu 9.10, Сервер FreeBSD 7.2, а нравится мне Arch



Репутация: -7


Цитата(dip56245 @ 16.1.2010, 22:07) *
при таком размере будут оба обслуживать, можно попробовать поднять размер кеша на nginx'е, но лучше файл и т.п. отдавать самим nginx'ом, а не php...


В кэш не получится, так как файлов много, и все они большого размера.
А если использовать flush() (Функция очищает буфер вывода PHP при этом всё содержимое буфера отправляется в браузер пользователя) или что то подобное, можно будет решить проблему?
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
VSJCFM
сообщение 17.1.2010, 10:54    [ Вставить ник в форму быстрого ответа ]
Сообщение #4


Фанат
Иконка группы

Группа: Скромные боги
Сообщений: 296
Регистрация: 9.7.2007
Пользователь №: 435
Спасибо сказали: 2 раз(а)

Дистрибутив:
FreeBSD 8.2-RELEASE amd64



Репутация: 4


Ex3me, опять... Маны читал? nginx - это прежде всего кэширующий реверсный прокси, одна из задач которого - забрать у апача данные как можно быстрее. И он как раз и расчитан на то, что у юзверя худой канал.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
dip56245
сообщение 18.1.2010, 11:58    [ Вставить ник в форму быстрого ответа ]
Сообщение #5


Programmer
****

Группа: Старейшины
Сообщений: 481
Регистрация: 28.9.2005
ICQ: 82591163
Пользователь №: 2
Спасибо сказали: 2 раз(а)

Дистрибутив:
SuSE
Jabber ID:
dip56245@gmail.com



Репутация: 2


Цитата(Ex3me @ 16.1.2010, 21:27) *
В кэш не получится, так как файлов много, и все они большого размера.
А если использовать flush() (Функция очищает буфер вывода PHP при этом всё содержимое буфера отправляется в браузер пользователя) или что то подобное, можно будет решить проблему?

VSJCFM - уже написал,задача nginx забрать весь контент у апача (не более размера кеша), и не спешно отдавать пользователю... т.к. апачу да еще и с ПХП и еще с ведром мусора на странице нужно скажем 100-150метров ОЗУ что бы сгенерить 1Мб данных, а nginx'у всего будет занято 1Мб+тех данные...
где-то так... а в чем проблема отдавать файлы nginx'ом?
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Ex3me
сообщение 18.1.2010, 18:08    [ Вставить ник в форму быстрого ответа ]
Сообщение #6


lamer...
****

Группа: Опытные
Сообщений: 401
Регистрация: 7.8.2007
Из: лесу
ICQ: 404554260
Пользователь №: 512
Спасибо сказали: 2 раз(а)

Дистрибутив:
Дома и на работе Ubuntu 9.10, Сервер FreeBSD 7.2, а нравится мне Arch



Репутация: -7


Цитата(dip56245 @ 18.1.2010, 12:58) *
а в чем проблема отдавать файлы nginx'ом?


Речь идет о сайте с музыкой. очень часто бывает, что сайты воруют музыку. Для этого пишут скрипт который бы выкачал с сайта всю музыку. Чтобы бот не смог пройти по ссылке, ссылка состовляется яваскриптом. Пример: путь к файлу site.ru/file.mp3, яваскрипт шифрует путь примерно так:
var a='s';
var b='i';
var c='t';
var d='e';
var e='.';
var f='r';
var j='u';
var h='/';
var g='f';
var k='i';
var l='l';
var m='e';
var n='.';
var o='m';
var p='p';
var r='3';

Если у вас полноценный браузер и вы не робот, то яваскрипт выполнит свою работу a+b+c+d+e+f.......... и получится путь к файлу который можно скачать.

Так как путь постоянно меняется, то нельзя ложить файл на сервер в папку. сам файл находится за пределами htdocs.

Есть скрипт который отдает файл. скрипт составляет заголовки, и шлет контент файла. Сейчас уже делает это fopen() fread().

Огромный плюс составлять заголовки скриптом, это брать имена файлов из базы (пример http://kibergrad.com/?do=music&name=90..._-_dlya_nee_mp3 нажать скачать, и будет видно имя файла на русском).


В чем состоит проблема?
Этапы запроса
1. Запрос принят
2. Apache обрабатывает скрипт на пхп
3. Обработавши скрипт, apache передает контент nginx'у
4. Apache закрывается, а Nginx передает контент пользователю.

Пробема медлу 3 и 4 этапом, когда apache не считавши до конца файл, начинает отдавать в это же время контент nginx'y. Поэтому они работают вдвоем одновременно, хавая больше ресурсов..

Задача, заставить apache считать контент из файла, передать его nginxy и сразу же закрыться.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
dip56245
сообщение 19.1.2010, 10:07    [ Вставить ник в форму быстрого ответа ]
Сообщение #7


Programmer
****

Группа: Старейшины
Сообщений: 481
Регистрация: 28.9.2005
ICQ: 82591163
Пользователь №: 2
Спасибо сказали: 2 раз(а)

Дистрибутив:
SuSE
Jabber ID:
dip56245@gmail.com



Репутация: 2


/оффтоп/ я тебя расстрою, я писал уже бота как раз для таких случаев, в инете валом библиотек которые умеют адекватно обрабатывать яваскрипт... но я делал еще проще, на делфе activex компонент, как-будто IE работает, бот открывал страницу, по id или по тегам гулял по странице, нажимал кнопки, заполнял поля) если нужна защита - капча. /оффтоп/

для того что бы nginx принял все, а не говорил "мол абожди" увеличь размер кеша, тогда апач отработает и закроется, а nginx будет спокойно отдавать.

/оффтоп/
я когда то делал знакомому подобную систему, но там порнуха была, смысл тоже....
дык я сделал проще, при авторизации, когда чел. нажимает "скачать",
на серваке в каталоге который доступен по nginx'у создавался симлинк на файл, и файл был доступен для скачки через nginx напрямую.
+ ссылка на симлинк и время када ей умереть записывалась в БД, каждые 5 мин отрабатывался пхп скрипт который прибивал симлинки, у которых время вышло (время по формуле считалась размер*мин. скорость)
/оффтоп/


Спасибо сказали:
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Ex3me
сообщение 19.1.2010, 13:52    [ Вставить ник в форму быстрого ответа ]
Сообщение #8


lamer...
****

Группа: Опытные
Сообщений: 401
Регистрация: 7.8.2007
Из: лесу
ICQ: 404554260
Пользователь №: 512
Спасибо сказали: 2 раз(а)

Дистрибутив:
Дома и на работе Ubuntu 9.10, Сервер FreeBSD 7.2, а нравится мне Arch



Репутация: -7


Цитата
ссылка на симлинк и время када ей умереть записывалась в БД, каждые 5 мин отрабатывался пхп скрипт который прибивал симлинки, у которых время вышло (время по формуле считалась размер*мин. скорость)


У меня было так раньше, и тоже хранилось в базе. В чем была проблема, так в том, что симлинк если занят еще вебсервером, то он не удалялся. Тогда я не делал проверку на удаления, и убивал запись в бд.

Если будет симлинк, то уже загаловки свои я не прикручу из базы(IMG:http://forum.linux.lg.ua/style_emoticons/default/sad.gif)


Буду увеличивать кэш...
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
dip56245
сообщение 20.1.2010, 16:50    [ Вставить ник в форму быстрого ответа ]
Сообщение #9


Programmer
****

Группа: Старейшины
Сообщений: 481
Регистрация: 28.9.2005
ICQ: 82591163
Пользователь №: 2
Спасибо сказали: 2 раз(а)

Дистрибутив:
SuSE
Jabber ID:
dip56245@gmail.com



Репутация: 2


эм, а как он у ття был занят вебсервером? он должен был создасться и все освободится. я создавал через exec(...)
затем другим скриптом убивалось без проблем....

а какие тебе заголовки из БД нужны? чет я не понял немного.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Ex3me
сообщение 21.1.2010, 1:21    [ Вставить ник в форму быстрого ответа ]
Сообщение #10


lamer...
****

Группа: Опытные
Сообщений: 401
Регистрация: 7.8.2007
Из: лесу
ICQ: 404554260
Пользователь №: 512
Спасибо сказали: 2 раз(а)

Дистрибутив:
Дома и на работе Ubuntu 9.10, Сервер FreeBSD 7.2, а нравится мне Arch



Репутация: -7


Цитата
эм, а как он у ття был занят вебсервером? он должен был создасться и все освободится. я создавал через exec(...)


Создался симлинк, пришло время его прибить. В этот же момент пользователь скачивает файл средствами apache (на то время). Удаление прохожит не успешно. Впринципе можно устроить проверку, но за 2 часа скапливается около 1000 симлинков.
Примерно 1 пользователь в среднем создаёт 6 симлинков. За 2 часа посещает около 200 чел * 6 симлинков - мусора много получается. Когда будет за час по 1 тысяче посещать, будет вообще мусорка. Если это нормально, поправьте меня.

Цитата
а какие тебе заголовки из БД нужны? чет я не понял немного.


Когда скачиваешь файл, то его имя отправляется заголовками
Код
header ("Content-Disposition: attachment; filename=\"Русское имя файла с любыми знаками.mp3\"");

Если имя файла настоящее "123.mp3", то из базы мы достаем имя как полагается.

И тебе выскакивает куда сохранить файл, и стоит уже заполненное имя файла на русском языке.


Прикрепленный файл  Opera1.png ( 47.14 килобайт ) Кол-во скачиваний: 12
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
psvmcc
сообщение 21.1.2010, 23:04    [ Вставить ник в форму быстрого ответа ]
Сообщение #11


Новичок
*

Группа: Новобранец
Сообщений: 18
Регистрация: 15.11.2007
Из: Luhansk, Schastie
ICQ: 315827040
Пользователь №: 735
Спасибо сказали: 0 раз(а)

Дистрибутив:
ArchLinux | Ubuntu | FreeBSD
Jabber ID:
psvmcc@gmail.com



Репутация: 0


Я думаю тут лучшее решение это копать в сторону лайти с mod_secdownload, либо к нгинсу такое http://wiki.nginx.org/NginxHttpSecureDownload прикрутить.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 19.10.2017, 0:21    


BonAppetit - кулинарные авторские фоторецепты  ITO-info