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:
ngx_http_image_filter_module - ho an'ny fanovana ny sary;ngx_http_proxy_module - ho an'ny cache;ngx_http_secure_link_module - miaro amin'ny spam;
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:
myproject.ru/preview/i [md5]/[path_to_image]myproject.ru/preview/c [md5]/[habe]/[path_to_image]myproject.ru/preview/r [md5]/[habe]/[path_to_image]
* 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.
Source: www.habr.com