Sawirka oo wax ka beddelaya duullimaad

Ku dhawaad ​​codsi kasta oo shabakada ah ee isticmaala sawirada, waxaa jira baahi loo qabo in la abuuro nuqullo yaryar oo sawiradan ah, inta badanna waxaa jira qaabab badan oo sawirro dheeraad ah.
Ku darista cabbirro cusub codsi jira waxay sidoo kale keentaa madax-xanuun. Markaa hawsha:

Ujeeddo

Aynu tilmaamno liiska shuruudaha:

  • Samee sawiro dheeraad ah oo ah qaabab kasta oo duullimaad ah adoon soo bandhigin hawlqabad dheeraad ah codsiga wakhti kasta inta lagu jiro jiritaanka arjiga;
  • Sawirro dheeri ah uma baahna in la sameeyo codsi kasta;
  • Dami awoodda soo saarista sawirro dheeraad ah oo qaabab aan la cayimin.

Waxaan sharxi doonaa qodobka u dambeeya, sababtoo ah wax yar ayuu ka hor imanayaa qodobka koowaad. Haddii aan samayno jiilka sawir kasta oo furan, markaa waxaa jira suurtagalnimada weerar lagu qaado goobta iyadoo la abuurayo tiro badan oo codsiyo ah si loo cabbiro sawirka qaabab aan xadidnayn, sidaas darteed baylahdaani waxay u baahan tahay in la xiro.

qaabeynta rakibaadda nginx

Si loo xalliyo shuruudaha kor ku xusan waxaan u baahannahay qaybaha soo socda ee nginx modules:

Modules ngx_http_image_filter_module и ngx_http_secure_link_module laguma rakibin si caadi ah, markaa waa in lagu qeexaa heerka qaabaynta rakibidda nginx:

phoinix@phoinix-work:~/src/nginx-0.8.29
$ ./configure --with-http_secure_link_module --with-http_image_filter_module

qaabeynta nginx

Mid cusub ayaan ku darnaa qaabeynta martidayada goobta iyo cabbiraadaha kaydinta guud:

...
    proxy_cache_path /www/myprojects/cache levels=1:2 keys_zone=image-preview:10m;
...
    server {
...
        location ~ ^/preview/([cir])/(.+) {
        # Тип операции
            set                         $oper $1;
        # Параметры изображения и путь к файлу
            set                         $remn $2;
        # Проксируем на отдельный хост
            proxy_pass                  http://myproject.ru:81/$oper/$remn;
            proxy_intercept_errors      on;
            error_page                  404 = /preview/404;
        # Кеширование
            proxy_cache                 image-preview;
            proxy_cache_key             "$host$document_uri";
        # 200 ответы кешируем на 1 день
            proxy_cache_valid           200 1d;
        # остальные ответы кешируем на 1 минуту
            proxy_cache_valid           any 1m;
        }
        
        # Возвращаем ошибку
        location = /preview/404 {
            internal;
            default_type                image/gif;
            alias                       /www/myprojects/image/noimage.gif;
        }
...
    }
...

Waxaan sidoo kale ku darnaa martigeliyaha cusub qaabeynta:

server {
    server_name                     myproject.ru;
    listen                          81;

    access_log                      /www/myproject.ru/logs/nginx.preview.access_log;
    error_log                       /www/myproject.ru/logs/nginx.preview.error_log info;

    # Указываем секретное слово для md5
    secure_link_secret              secret;

    # Ошибки отправляем она отдельный location
    error_page                      403 404 415 500 502 503 504 = @404;

    # location Для фильтра size
    location ~ ^/i/[^/]+/(.+) {
        
        # грязный хак от Игоря Сысоева *
        alias                       /www/myproject.ru/images/$1;
        try_files                   "" @404;
    
        # Проверяем правильность ссылки и md5
        if ($secure_link = "") { return 404; }
        
        # Используем соответсвующий фильтр
        image_filter                size;
    }

    # По аналогии остальные location для других фильтров
    location ~ ^/c/[^/]+/(d+|-)x(d+|-)/(.+) {
        set                         $width  $1;
        set                         $height $2;
        
        alias                       /www/myproject.ru/images/$3;
        try_files                   "" @404;
    
        if ($secure_link = "") { return 404; }
    
        image_filter                crop  $width  $height;
    }
    
    location ~ ^/r/[^/]+/(d+|-)x(d+|-)/(.+) {
        set                         $width  $1;
        set                         $height $2;

        alias                       /www/myproject.ru/images/$3;
        try_files                   "" @404;

        if ($secure_link = "") { return 404; }

        image_filter                resize  $width  $height;
    }

    location @404 { return 404; }
}

Natiijo ahaan, sawirro dheeraad ah ayaa lagu heli karaa iyadoo la adeegsanayo xiriiriyeyaasha soo socda:

* try_files - xasaasi u ah meelaha bannaan iyo jilayaasha Ruush, sidaas darteed waxaan ku qasbanaaday in aan la qabsado alias.

Isticmaal codsiga shabakada

Heerka codsiga shabakada, waxaad samayn kartaa nidaamka soo socda (Perl):

sub proxy_image {
    use Digest::MD5     qw /md5_hex/;
    my %params = @_;
    my $filter = {
                    size    => 'i',
                    resize  => 'r',
                    crop    => 'c'            
                  }->{$params{filter}} || 'r';
    my $path = ($filter ne 'i' ?
                    ( $params{height} || '_' ) . 'x' . ( $params{width} || '_' ) . '/' :
                    ()
               ) . $params{source};
    my $md5 = md5_hex( $path . 'secret' );
    $path = '/preview/' . $filter . '/' . $md5 . '/' . $path;
    return $path;
}

my $preview_path = &proxy_image(
                    source  => 'image1.jpg',
                    height  => 100,
                    width   => 100,
                    filter  => 'resize'
                );

Inkasta oo aan sidoo kale ku talin lahaa xisaabinta cabbirrada Falanqeynta.

Rake

Marka la tirtiro sawirka asalka ah, horudhacyada, si dabiici ah, lagama tirtiri doono khasnadda ilaa kaydinta la buriyo, iyo kiiskeena, horudhacyadu waxay jiri karaan maalin kadib tirtirka, laakiin tani waa wakhtiga ugu badan.

asalka ah

Source: www.habr.com

Add a comment