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

forpdfsending at gmail.com forpdfsending at gmail.com
Sat Jun 19 16:34:10 MSD 2010


Здравствуйте.

Вопрос возник, уважаемые разработчики и пользователи nginx.
Сделал всё как описано ниже.
И nginx возвращает ошибку:
2010/06/19 18:23:06 [crit] 3480#1928: *31 CreateFile() "d:/Distributivs/Эверест.exe" failed (1113: Символ Юникода не имеет сопоставления в конечной многобайтовой кодовой странице), client: 52.215.77.77, server: zxcvb.no-ip.org, request: "GET /get_file/?filehash=2b161da577fc7ba4d330283a4d748230 HTTP/1.1", upstream: "http://127.0.0.1:80/get_file/?filehash=2b161da577fc7ba4d330283a4d748230", host: "zxcvb.no-ip.org:8080"
2010/06/19 18:23:14 [crit] 3480#1928: *33 CreateFile() "d:/Distributivs/Эверест.exe" failed (1113: Символ Юникода не имеет сопоставления в конечной многобайтовой кодовой странице), client: 52.215.77.77, server: zxcvb.no-ip.org, request: "GET /get_file/?filehash=2b161da577fc7ba4d330283a4d748230 HTTP/1.1", upstream: "http://127.0.0.1:80/get_file/?filehash=2b161da577fc7ba4d330283a4d748230", host: "zxcvb.no-ip.org:8080"

Прошу содействия в исправлении данной ошибки.
Имена файлов - русские. Неужели nginx не предназначен для работы с
файлами, названия которых - русские? Если да, то как исправить эту
ошибку.
P.S. Хидеры отдаются нормально.


Вы писали 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