Fetola boholo ba litšoantšo ha u fofa

Hoo e batlang e le sesebelisoa leha e le sefe sa marang-rang se sebelisang litšoantšo, ho na le tlhokahalo ea ho etsa likopi tse nyenyane tsa litšoantšo tsena, 'me hangata ho na le liforomo tse' maloa bakeng sa litšoantšo tse eketsehileng.
Ho eketsa litekanyo tse ncha ho kopo e teng ho boetse ho baka hlooho e meng. Ka hona, mosebetsi:

Sepheo

Ha re bolele lenane la litlhoko:

  • Hlahisa litšoantšo tse ling tsa mofuta ofe kapa ofe ka fofa ntle le ho kenya ts'ebetso e eketsehileng ts'ebelisong ka nako efe kapa efe nakong ea ts'ebeliso;
  • Litšoantšo tse ling ha li hloke hore li hlahisoe kopo e 'ngoe le e 'ngoe;
  • Thibela bokhoni ba ho hlahisa litšoantšo tse ling tsa lifomate tse sa boleloang.

Ke tla hlalosa ntlha ea ho qetela, hobane e hanana le ntlha ea pele hanyenyane. Haeba re etsa hore moloko oa litšoantšo leha e le life o bulehe, joale ho na le monyetla oa ho hlasela setšeng ka ho hlahisa palo e kholo ea likōpo tsa ho fetola setšoantšo ka palo e sa lekanyetsoang ea liforomo, kahoo ts'oaetso ena e hloka ho koaloa.

tlhophiso ea ho kenya nginx

Ho rarolla litlhokahalo tse kaholimo re hloka sete e latelang ea li-module tsa nginx:

Mejule ngx_http_image_filter_module и ngx_http_secure_link_module ha li kentsoe ka mokhoa oa kamehla, ka hona li tlameha ho hlalosoa mothating oa ho hlophisoa ha instola nginx:

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

tlhophiso ea nginx

Re eketsa e ncha ho tlhophiso ea rona ea moamoheli sebaka le liparamente tse akaretsang tsa 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;
        }
...
    }
...

Re boetse re kenyelletsa moamoheli e mocha ho 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; }
}

Ka lebaka leo, litšoantšo tse eketsehileng li ka fumanoa ho sebelisa lihokelo tse latelang:

* leka_files - e nahanela libaka le litlhaku tsa Serussia, kahoo ke ile ka tlameha ho etsa crutch ka alias.

Sebelisa ho web application

Boemong ba kopo ea webo, o ka etsa ts'ebetso e latelang (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'
                );

Le hoja ke tla boela ke khothaletse ho bala boholo ponelo.

Rake

Ha u hlakola setšoantšo sa pele, liponelopele, ka tlhaho, li ke ke tsa hlakoloa ho cache ho fihlela cache e sa sebetse, 'me molemong oa rona, ponelopele e ka ba teng bakeng sa letsatsi kamora ho hlakoloa, empa ena ke nako e telele.

ea mantlha

Source: www.habr.com

Eketsa ka tlhaloso