All streams
Search
Write a publication
Pull to refresh
38
0.1
cadmi @cadmi

User

Send message
у админов обычно seedbox столько рейтинга наваривает, что впору его засаливать и закусывать! :)
да незачем их там хранить. перехватил, пропатчил, отдал клиенту, стер. можно вообще не сохранять файл на диск, все делать в памяти (или на рамдиске). для «статистики использования трекеров» можно прямо в скрипте-патчере делать +1 к очередному трекеру.
Все почему-то делают у себя на bind'e зону именно .local, а в ней запись retracker A x.x.x.x

Правильнее сделать зону retracker.local, так и назвать. а в ней, запись A, ну как делают «для сайтиков, чтобы без ввв». Почему это не доходит до большинства, я честно говоря, даже не понимаю.

Наверное потому, что для этого надо думать головой, а не копипастить «инструкцию с торрентс.ру» :)

Вспомни, когда я написал про фейл с .local на nag.ru, даже тамошняя публика начала кидаться помидорами, «да пофигу, это никто не использует». А казалось бы, там то мозгов по определению побольше. Я еще объяснял им там, «подождите, присунет Microsoft очередной апдейт, после которого windows начнут ругаться, тогда запоёте» :)
да ну. попросту не делать в DNS'е зону .local :)
«специально уделить внимание совместимости» — это нифига равно «не обращать внимания, закрывать глаза» :)
у вменяемых админов и retracker.local работает и zeroconf не выключается. и мы с тобой оба понимаем, как это можно сделать :)

но вот у меня дома оба хоумпрова (бывший и текущий) сделали через ж… приду домой, сделаю скриншот, как именно сообщает.
> На несовместимость .local с zeroconf в данном случае можно закрыть глаза, поскольку в идеале DNS-запросы клиента с включенным zeroconf даже не должны доходить до нашего сервера.

Такие, как Вы «одмины» закрывают на это глаза, а у клиентов потом zeroconf автоматически отключается. Конечно, «запросы не доходят». Потому что Ubuntu, например, честно сообщает «У вашего [криворукого] провайдера в DNS'е [ВНЕЗАПНО] зона .local, поэтому мы avahi отключаем. упс.»

нет, не только. вчера забыл залогиниться, случайно залил анонимно.
а? перебор размеров? так это чтобы регэксп не захламлять, там было написано просто \d{2} про «две цифры».
в реальной жизни можно написать регэксп, который пропустит только то, что реально нужно.

ну, например…

location ~ ^\/avatar\/(30|40|60)\/(.*)$ {
бубубубу
}

… и пропустит только /30/ или /40/ или /60/ а 31 и 32 обломятся и будет 404.
а хеш функция от закрытого ключа в данном случае как раз ни при чем. соли то там нет — просто имя файла в кэше вычисляется из URI. если скормить /31/ то конечно все поедет и будет ресайзиться. но сразу писать перечисления было не педагогично. это ж уже задача на man pсre и на man pcretest, а не про nginx :)

для линка с использованием хеш функции от ключа есть другой модуль, ngx_http_secure_link
www.sysoev.ru/nginx/docs/http/ngx_http_secure_link_module.html

> 1. Ваш скрипт хоть и реализует генерацию динамических аватарок, но рискует положить сервер если кто-нибудь запустит на нём перебор.

перебор, простите, чего? Вы что-то недопоняли, очевидно. объясните, что имеется в виду, и что из этого нельзя перебрать в primage. я либо соглашусь, либо объясню непонятное :)

> 2. Что будете делать, если количество аватарок зашкалит за 10k? Не боитесь, что начнутся тормоза в связи с таким большим количеством файлов в папках? Primage в этом случае может быть настроен на автоматическое создание под-папок

внимательно посмотрите на строчку proxy_cache_path /where/is/cache/avatars levels=1:2 keys_zone=avatars;
levels=1:2 это для Вас :) двукратная вложенность. ключом и именем файла в кэше является результат функции md5 от проксированного URL. параметр levels задаёт уровни иерархии кэша. в моем примере, /avatar/30/cadmi имя файла в кэше будет примерно такого вида: 7950e8e3e6061d6fa113c4edb71b010b (md5 от /avatar/30/cadmi)

лежать будет в /where/is/cache/avatars/b/10/7950e8e3e6061d6fa113c4edb71b010b. жаль, тэги мне недоступны, выделил бы bold'ом. b — последний символ, 10 — два предпоследних. это и есть levels=1:2 в proxy_cache_path. сделаете levels=1:2:2 будет три уровня вложенности и путь типа /where/is/cache/avatars/b/10/b0/7950e8e3e6061d6fa113c4edb71b010b

подробнее на www.sysoev.ru/nginx/docs/http/ngx_http_proxy_module.html#proxy_cache_path

спрашивать про ограничение на максимальный размер кэша (количество и суммарный размер файлов), а также кто за ним следит и кто его чистит, я не буду :) потому что в сорцы primage не смотрел, возможно там это есть.
потратив еще две строчки, можно к приведенному выше конфигу добавить соответствующие limit_req_zone и limit_req с нужным burst: количество в секунду, остальное в очередь, если не успели, то ошибку. а добавив еще одну строчку, вместо ошибки выдавать некую дефолтную картинку.

слова «ну-ка» и «давайте в студию» по некоторым правилам хорошего тона, кстати, подразумевали бы какой-то комментарий, а не смущенное молчание :)
предупреждаю: желающим скопипастить конфиг к себе я оставил домашнее задание :) дабы копируя, хоть немного почитали документацию nginx, вдруг по дороге узнают для себя еще чего-нибудь полезного. впрочем в части, касающейся непосредственно обсуждаемого вопроса, конфиг абсолютно рабочий.
> И вы с этим не согласны? О чём с вами можно после этого разговаривать? :)
я админ, мне эти 10% на загруженных серверах потом боком выходят :) тем программистам, у которых нет действительно веских причин (тот же watermark), со мной действительно не о чем разговаривать :) я же не вьедливости ради, надо так надо — можно и написать. просто большое начинается с малого. вон в комментариях выше уже отметились «любители проще» со своими «readfile() + content-type», для которых x-accel-redirect 100 в гору, что будет «слишком сложным» :)

> Да ладно :) Ну ка давайте эти 5 строк, в студию!

примерно такой случай. где-то у нас есть сервер, отдающий аватарки исходного размера по урлу типа h_t_t_p://server/users/username/avatar, в моем случае это система центральной авторизации и картинки 150*150.

в нужном месте (в моем случае это чат, которому нужны две аватары, 30х30 и 80х80) пишется следующий location, обслуживающий урлы вида /avatar/две_цифры/username. например /avatar/30/cadmi сходит, возьмет картинку 150х150, сресайзит до 30х30, скэширует и отдаст клиенту. /avatar/40/cadmi сресайзит на 40х40

прошу прощения, тэги в моих комментариях режутся (заминусовали карму за «наезд» на гугль), поэтому немного каша.

это без кэша

location ~ ^\/avatar\/(\d{2})\/(.*)$ {
proxy_pass h_t_t_p://server/users/$2/avatar;
image_filter resize $1 $1;
}

это с кэшем

proxy_cache_path /where/is/cache/avatars levels=1:2 keys_zone=avatars;

location ~ ^\/avatar\/(\d{2})\/(.*)$ {
proxy_pass h_t_t_p://server/users/$2/avatar;
image_filter resize $1 $1;
proxy_cache avatars;
}

Игорь Сысоев сначала написал image_filter для nginx на imagemagic, но потом переделал на gd. у варианта с imagemagic безбожно текла память. после переписывания на gd процессы nginx стали есть «около 0» CPU, вместо 10%.

пруфлинк: bit.ly/9fKb0c (хабр корежит ссылки с запятой внутри, поэтому bit.ly, но для эстетов — forum.nginx.org/read.php?21,128545,128741#msg-128741 )
не надо.
там ничего не было написано про кэширование, удивительно, как автора того комментария только за это не забросали ссаными тряпками любители php, у которых 5% туда, 10% сюда — пофиг, «зато проще!» :)

«прикручивать» — в портах FreeBSD, например, он включается галкой при установке, ничего прикручивать не нужно.
«конфигурировать» — Ваш скрипт насчитывает 39 строк. конфиг соответствующего location на сервере врядли будет превышать 5.

единственное, действительно, watermark не положишь поверх. но и то только out-of-box. если бы заказчик настаивал с требованиями [так уж вышло, что я обычно сам себе заказчик :) ], то подпилить image_filter наверное заняло бы те же самые 40 строк, только на Си :)
не надо.
там ничего не было написано про кэширование, удивительно, как автора того комментария только за это не забросали ссаными тряпками любители php, у которых 5% туда, 10% сюда — пофиг, «зато проще!» :)

«прикручивать» — в портах FreeBSD, например, он включается галкой при установке, ничего прикручивать не нужно.
«конфигурировать» — Ваш скрипт насчитывает 39 строк. конфиг соответствующего location на сервере врядли будет превышать 5.

единственное, действительно, watermark не положишь поверх. но и то только out-of-box. если бы заказчик настаивал с требованиями [так уж вышло, что я обычно сам себе заказчик :) ], то подпилить image_filter наверное заняло бы те же самые 40 строк, только на Си :)
чего только не придумают…

на shared хостинге, ну может быть, приходится велосипедировать.

а если сервер свой, да еще хитов в день несколько более чем десять, то…

www.sysoev.ru/nginx/docs/http/ngx_http_image_filter_module.html
потом поверх еще
www.sysoev.ru/nginx/docs/http/ngx_http_proxy_module.html#proxy_cache

P.S. перед тем как минусовать, пожалуйста, подумай!
во-во. только хотел написать, что русские то совсем не упомянуты :) и Марина hotforwords Орлова вполне того заслуживает :)
когда через ssh, это и есть «локально» :)
три дня назад такое самостоятельно собранное уронили с 70 метров (глюк тестируемой кастомной прошивки).
сломали два пропеллера и все.

конечно в силу теста софта был без ПН, пустой. кабы был прицеплен фотик — ессно был бы фотику амбец :)

гудит кстати не сказать чтобы громко, но ОООООЧЕНЬ круто, шесть пропеллеров дают такой веселый фон, с такими обертонами, как будто Ил-18 или Ту-95 прогреваются :)

Information

Rating
3,704-th
Location
Россия
Date of birth
Registered
Activity