Chithunzi chikuchulukirachulukira

Pafupifupi pulogalamu iliyonse yapaintaneti yomwe imagwiritsa ntchito zithunzi, pamafunika kupanga makope ang'onoang'ono a zithunzizi, ndipo nthawi zambiri pamakhala mawonekedwe angapo azithunzi zowonjezera.
Kuwonjezera miyeso yatsopano ku pulogalamu yomwe ilipo kumayambitsanso mutu wina. Chifukwa chake ntchito:

Cholinga

Tiyeni titchule mndandanda wa zofunika:

  • Pangani zithunzi zowonjezera zamawonekedwe aliwonse pa ntchentche popanda kuyika zina zowonjezera pakugwiritsa ntchito nthawi iliyonse mukamagwiritsa ntchito;
  • Zithunzi zowonjezera siziyenera kupangidwa pazopempha zilizonse;
  • Letsani kuthekera kopanga zithunzi zowonjezera zamawonekedwe osadziwika.

Ndifotokoza mfundo yotsiriza, chifukwa imatsutsana pang'ono ndi mfundo yoyamba. Ngati tipanga m'badwo wa zithunzi zilizonse kutseguka, ndiye kuti pali kuthekera kwa kuwukira patsambalo popanga zopempha zambiri kuti musinthe kukula kwa chithunzicho kukhala mawonekedwe osawerengeka, ndiye kuti chiwopsezochi chiyenera kutsekedwa.

kukhazikitsidwa kwa nginx

Kuti tithane ndi zomwe zili pamwambapa timafunikira ma module awa a nginx:

Ma module ngx_http_image_filter_module ΠΈ ngx_http_secure_link_module sizinayikidwe mwachisawawa, chifukwa chake ziyenera kufotokozedwa pagawo lokonzekera nginx:

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

nginx kasinthidwe

Timawonjezera chatsopano ku kasinthidwe kathu kolandira malo ndi magawo onse a cache:

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

Timawonjezeranso wolandila watsopano ku 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; }
}

Zotsatira zake, zithunzi zowonjezera zitha kupezeka pogwiritsa ntchito maulalo awa:

* try_files - tcheru ku malo ndi zilembo za Chirasha, kotero ndimayenera kupanga ndodo alias.

Gwiritsani ntchito pa intaneti

Pamlingo wogwiritsa ntchito intaneti, mutha kuchita izi (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'
                );

Ngakhale ndingalimbikitsenso kuwerengera kukula kwake chithunzithunzi.

Makoswe

Mukachotsa chithunzi choyambirira, zowonetseratu, mwachibadwa, sizidzachotsedwa ku cache mpaka cache itachotsedwa, ndipo kwa ife, zowonetseratu zikhoza kukhalapo kwa tsiku limodzi pambuyo pochotsa, koma iyi ndi nthawi yochuluka.

choyambirira

Source: www.habr.com

Kuwonjezera ndemanga