Re: Вопрос по лимитированию скорости
forpdfsending at gmail.com
forpdfsending at gmail.com
Sat May 22 17:46:49 MSD 2010
Здравствуйте.
Как Вы и предлагали, я в конфиге нгинкса внёс изменения:
server {
listen 80;
server_name localhost;
limit_conn one 1;
location /get_file/
{
proxy_pass http://localhost:8070/qwe/headertest;
}
location /files/
{
root (тут пробовал ставить и alias) c:/1;
internal;
}
location /lim/
{
root C:/1;
limit_rate 4k;
limit_conn one 5;
}
Сервлетом отдаю следующее:
response.setHeader("Content-Disposition: attachment", "1.rar");
response.setHeader("X-Accel-Redirect:", "/files/lim/1.rar");
response.setHeader("X-Accel-Limit-Rate:", "155");
При этом в лог пишется ошибка
2010/05/22 19:43:49 [crit] 692#732: *14 CreateFile() "C:\1\nginx-0.8.36/html: /files/lim/1.rar" failed (123: Синтаксическая ошибка в имени файла, имени папки или метке тома), client: 192.168.1.2, server: localhost, request: "GET /get_file/ HTTP/1.1", upstream: "http://127.0.0.1:8070/qwe/headertest", host: "192.168.1.4"
2010/05/22 19:43:49 [error] 692#732: *16 CreateFile() "C:/1/favicon.ico" failed (2: Не удается найти указанный файл), client: 192.168.1.2, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.1.4", referrer: "http://192.168.1.4/get_file/"
Попробовал в сервлете поменять на
response.setHeader("X-Accel-Redirect:", "C:/1/lim/1.rar");
В логе стало отображатться следующее:
2010/05/22 19:38:44 [crit] 692#732: *11 CreateFile() "C:\1\nginx-0.8.36/html: C:/1/lim/1.rar" failed (123: Синтаксическая ошибка в имени файла, имени папки или метке тома), client: 192.168.1.2, server: localhost, request: "GET /get_file/ HTTP/1.1", upstream: "http://127.0.0.1:8070/qwe/headertest", host: "192.168.1.4"
2010/05/22 19:38:44 [error] 692#732: *13 CreateFile() "C:/1/favicon.ico" failed (2: Не удается найти указанный файл), client: 192.168.1.2, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.1.4", referrer: "http://192.168.1.4/get_file/"
Что не так,почему nginx пытается найти файл в C:\1\nginx-0.8.36/html
хотя я ему указал
location /files/
{
root (тут пробовал ставить и alias) c:/1;
internal;
}
Прошу консультации...
Вы писали 16 мая 2010 г., 16:21:01:
> 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 для серьезных целей, кроме
> тестирования при разработке, настоятельно не рекомендуется.
--
С уважением,
Forpdfsending mailto:forpdfsending at gmail.com
More information about the nginx
mailing list