Mufananidzo uri kukura panhunzi

Munenge chero web application inoshandisa mifananidzo, panodiwa kugadzira makopi madiki emifananidzo iyi, uye kazhinji pane akati wandei mafomati ekuwedzera mifananidzo.
Kuwedzera zviyero zvitsva kune iripo application kunokonzeresa mamwe misoro. Saka basa:

Basa

Ngatiratidze rondedzero yezvinodiwa:

  • Gadzira mamwe mapikicha emhando ipi neipi pane nhunzi pasina kuunza imwe mashandiro mukushandisa chero nguva panguva yekuvapo kwekushandisa;
  • Mimwe mifananidzo haidi kugadzirwa pachikumbiro chega chega;
  • Dzima kukwanisa kugadzira mimwe mifananidzo yemafomati asina kutaurwa.

Ini ndichatsanangura pfungwa yekupedzisira, nekuti inopesana zvishoma nezvekutanga. Kana isu tikaita chizvarwa chechero mifananidzo yakavhurika, saka pane mukana wekurwiswa kwesaiti nekugadzira nhamba huru yezvikumbiro zvekugadzirisa mufananidzo muhuwandu husingagumi hwemafomati, saka kusagadzikana uku kunoda kuvharwa.

nginx kugadzika kumisikidzwa

Kuti tigadzirise zvinodiwa pamusoro apa tinoda inotevera seti ye nginx modules:

Modules ngx_http_image_filter_module ΠΈ ngx_http_secure_link_module hazvina kuisirwa nekukasira, saka dzinofanirwa kutsanangurwa padanho rekugadzirisa nginx:

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

nginx kugadzirisa

Isu tinowedzera imwe nyowani kune yedu host gadziriso nzvimbo uye general cache parameters:

...
    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;
        }
...
    }
...

Isu tinowedzerawo mugadziri mutsva kune config:

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; }
}

Nekuda kweizvozvo, mimwe mifananidzo inogona kuwanikwa uchishandisa anotevera malink:

* try_files - inonzwisisa nzvimbo uye mavara echiRussia, saka ndaifanira kugadzira crutch nayo zita remadunhurirwa.

Shandisa muwebhu application

Padanho rewebhu rekushandisa, unogona kuita zvinotevera maitiro (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'
                );

Kunyangwe ini ndingakurudzirawo kuverenga masaizi pfupiso.

Rake

Paunenge uchidzima mufananidzo wepakutanga, zvitarisiko, sezvizvi, hazvizodzimirwe kubva kucache kudzamara cache isisashande, uye kwatiri isu, maonerwo anogona kuvepo kwezuva mushure mekudzima, asi ino ndiyo nguva yakanyanya.

chepakutanga

Source: www.habr.com

Voeg