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:
ngx_http_image_filter_module - yekuchinja saizi mifananidzo;ngx_http_proxy_module - ye caching;ngx_http_secure_link_module - kudzivirira kubva kune spam;
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:
myproject.ru/preview/i [md5]/[path_to_image]myproject.ru/preview/c [md5]/[saizi]/[path_to_image]myproject.ru/preview/r [md5]/[saizi]/[path_to_image]
* 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.
Source: www.habr.com