Re: Вопрос по лимитированию скорости

Boris Dolgov boris at dolgov.name
Sun May 16 15:21:01 MSD 2010


2010/5/16 Артур Хуснутдинов <forpdfsending at gmail.com>:
> Спасибо, прекрасно!
> Но теперь я в ступоре:
> Получается, что:
> /lim/имя файла - скорость режется
> /nelim/имя файла - скорость не режется
>
> Вопрос - как мне сделать динамические ссылки? Ведь юзверь, один раз увидев,
> что если качать не с адреса /lim/имя файла, а с /nelim/имя файла, то каждый
> раз будет просто руками исправлять адресную строку на /nelim/имя файла и
> качать с /nelim/имя файла.
Как я понял, у Вас в /lim и /nelim хранятся разные файлы из c:/1/lim и
c:/1/nelim. Если хочется по обоим адресам отдавать файлы из c:/, то
надо написать вот так:
location /lim/
{
    limit_rate ...;
    alias c:/1/;
}
location /nelim/
{
    alias c:/1/;
}

> Как динамику-то сделать? В своё время я писал задачку, заточенную под эту
> задачу - при запросе файла с сайта юзверю передавалась ссылка
> /userid/filehash, а в БД MySQL заносилась запись с параметрами userid,
> filehash, path to file (определяется средствами PHP на основе filehash) и
> downloadspeed. Программа при запросе брала userid и filehash с GET URL и
> смотрела по БД, есть ли запись в ней с таким userid и filehash ,если есть,
> то отдавала файл на скорости, взятой из записи в БД.
> Так вот, как-нибудь возможно ли на nginx построить такой аналог?
То, что Вы хотите сделать можно сделать, используя проксирование на
http или fastcgi-бекенд.
У Вас должен быть location для файлов:
location /files/
{
    alias c:/1/;
    internal;
}
Директива internal не позволит пользователям получить доступ к файлам напрямую.
И location для бекенда:
location /get_file/
{
    proxy_pass/fastcgi_pass ...;
}
На бекенде должен висеть простенький скрипт - при принятии запроса
вида /get_file/?user=userid&file=filehash лезть в базу и:
1) Отдавать заголовок:
Content-Disposition: attachment; filename=имя_файла
2) Отдавать заголовок:
X-Accel-Redirect: /files/путь_до_файл_относительно_c:/1/
3) Если нужно ограничить скорость, отдавать заголовок:
X-Accel-Limit-Rate: ограничение_скорости_в_байтах_в_секунду.

А вообще - использование nginx/windows для серьезных целей, кроме
тестирования при разработке, настоятельно не рекомендуется.

-- 
Boris Dolgov.


More information about the nginx mailing list