Hanova ny haben'ny sary amin'ny lalitra

Saika amin'ny fampiharana tranonkala rehetra mampiasa sary dia ilaina ny mamorona dika kely amin'ireo sary ireo, ary matetika dia misy endrika maromaro ho an'ny sary fanampiny.
Ny fampidirana refy vaovao amin'ny fampiharana efa misy dia miteraka aretin'andoha ihany koa. Noho izany ny asa:

asa

Andeha hojerentsika ny lisitry ny fepetra takiana:

  • Mamorona sary fanampiny amin'ny endrika rehetra amin'ny sidina nefa tsy mampiditra fiasa fanampiny ao amin'ny fampiharana na oviana na oviana mandritra ny fisian'ny fampiharana;
  • Tsy mila mamorona sary fanampiny isaky ny fangatahana;
  • Atsaharo ny fahafahana mamorona sary fanampiny amin'ny endrika tsy voafaritra.

Hazavaiko ny teboka farany, satria mifanohitra kely amin'ny teboka voalohany. Raha ataontsika misokatra ny famoronana sary rehetra, dia misy ny mety hisian'ny fanafihana amin'ny tranokala amin'ny alΓ lan'ny famoronana fangatahana marobe mba hanovana ny haben'ny sary ho endrika endrika tsy manam-petra, noho izany dia mila mikatona io vulnerable io.

nginx installation configuration

Mba hamahana ireo fepetra voalaza etsy ambony ireo dia mila ireto mody nginx manaraka ireto isika:

Modules ngx_http_image_filter_module ΠΈ ngx_http_secure_link_module dia tsy napetraka amin'ny alΓ lan'ny default, noho izany dia tokony hofaritana amin'ny dingana fananganana fametrahana nginx:

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

nginx configuration

Manampy iray vaovao amin'ny fandrindrana mpampiantrano anay izahay toerana ary paramètre cache ankapobe:

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

Manampy mpampiantrano vaovao amin'ny config koa izahay:

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

Vokatr'izany dia azo alaina sary fanampiny amin'ny alalan'ireto rohy manaraka ireto:

* try_files β€” saro-pady amin'ny habaka sy ny tarehin-tsoratra Rosiana, noho izany dia tsy maintsy nanao tehina aho antsoina.

Ampiasao amin'ny fampiharana tranonkala

Eo amin'ny sehatry ny fampiharana amin'ny tranonkala dia azonao atao ity dingana manaraka ity (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'
                );

Na dia manoro hevitra ihany koa aho ny kajy ny habe topi-maso.

karohy

Rehefa mamafa ny sary tany am-boalohany, dia tsy ho voafafa ao amin'ny cache ny previews raha tsy efa tsy manan-kery ny cache, ary amin'ny tranga misy antsika dia mety hisy ny preview mandritra ny iray andro aorian'ny famafana, fa izao no fotoana farany indrindra.

ny tany am-boalohany

Source: www.habr.com

Add a comment