Phantse nasiphi na isicelo sewebhu esisebenzisa imifanekiso, kukho imfuneko yokwenza iikopi ezincinci zale mifanekiso, kwaye kaninzi kukho iifomati ezininzi zemifanekiso eyongezelelweyo.
Ukongeza imilinganiselo emitsha kwisicelo esele sikhona kubangela iintloko ezibuhlungu. Ngoko ke umsebenzi:
Injongo
Masibonise uluhlu lweemfuno:
- Yenza imifanekiso eyongezelelweyo yayo nayiphi na ifomathi kwi-fly ngaphandle kokwazisa ukusebenza okongeziweyo kwisicelo nangaliphi na ixesha ngexesha lobukho besicelo;
- Imifanekiso eyongezelelweyo ayifuni ukuba yenziwe kwisicelo ngasinye;
- Khubaza ukukwazi ukwenza imifanekiso eyongezelelweyo yeefomati ezingachazwanga.
Ndiza kucacisa inqaku lokugqibela, kuba liphikisana nenqaku lokuqala. Ukuba senza isizukulwana sayo nayiphi na imifanekiso evulekileyo, ngoko kukho ithuba lokuhlaselwa kwisayithi ngokuvelisa inani elikhulu lezicelo zokutshintsha ubungakanani bomfanekiso kwinani elingenasiphelo lefomathi, ngoko ke lo mngcipheko kufuneka uvalwe.
nginx uqwalaselo lofakelo
Ukusombulula ezi mfuno zingasentla sifuna le seti ilandelayo yeemodyuli ze-nginx:
ngx_http_image_isihluzi_modyuli - yokutshintsha ubungakanani bemifanekiso;ngx_http_proxy_modyuli - kwi-caching;ngx_http_secure_link_modyuli - ukukhusela kwi-spam;
I modyuli ngx_http_image_isihluzi_modyuli ΠΈ ngx_http_secure_link_modyuli azifakwanga ngokungagqibekanga, ngoko ke kufuneka zichazwe kwinqanaba loqwalaselo lofakelo nginx:
phoinix@phoinix-work:~/src/nginx-0.8.29
$ ./configure --with-http_secure_link_module --with-http_image_filter_module
nginx uqwalaselo
Songeza entsha kuqwalaselo lwethu lokusingatha indawo kunye neeparamitha ze-cache ngokubanzi:
...
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;
}
...
}
...
Sikwangeza umamkeli omtsha kuqwalaselo:
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; }
}
Ngenxa yoko, imifanekiso eyongezelelweyo inokufumaneka kusetyenziswa la makhonkco alandelayo:
myproject.ru/preview/i [md5]/[indlela_ye_umfanekiso]myproject.ru/preview/c [md5]/[ubukhulu]/[indlela_to_image]myproject.ru/preview/r [md5]/[ubukhulu]/[indlela_to_image]
* zama_iifayile - ubuthathaka kwizithuba kunye nabalinganiswa baseRashiya, ngoko ke kwafuneka ndenze intonga ogama limbi.
Sebenzisa kwisicelo sewebhu
Kwinqanaba lesicelo sewebhu, unokwenza le nkqubo ilandelayo (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'
);
Nangona ndingaphinda ndicebise ukubala ubungakanani yemboniso.
Qhekeza
Xa ucima umfanekiso wokuqala, ukujonga kuqala, ngokwemvelo, akuyi kususwa kwi-cache de i-cache ingasebenzi, kwaye kwimeko yethu, ukujonga kuqala kunokubakho ngosuku emva kokususwa, kodwa eli lixesha eliphezulu.
umthombo: www.habr.com