Pafupifupi pulogalamu iliyonse yapaintaneti yomwe imagwiritsa ntchito zithunzi, pamafunika kupanga makope ang'onoang'ono a zithunzizi, ndipo nthawi zambiri pamakhala mawonekedwe angapo azithunzi zowonjezera.
Kuwonjezera miyeso yatsopano ku pulogalamu yomwe ilipo kumayambitsanso mutu wina. Chifukwa chake ntchito:
Cholinga
Tiyeni titchule mndandanda wa zofunika:
- Pangani zithunzi zowonjezera zamawonekedwe aliwonse pa ntchentche popanda kuyika zina zowonjezera pakugwiritsa ntchito nthawi iliyonse mukamagwiritsa ntchito;
- Zithunzi zowonjezera siziyenera kupangidwa pazopempha zilizonse;
- Letsani kuthekera kopanga zithunzi zowonjezera zamawonekedwe osadziwika.
Ndifotokoza mfundo yotsiriza, chifukwa imatsutsana pang'ono ndi mfundo yoyamba. Ngati tipanga m'badwo wa zithunzi zilizonse kutseguka, ndiye kuti pali kuthekera kwa kuwukira patsambalo popanga zopempha zambiri kuti musinthe kukula kwa chithunzicho kukhala mawonekedwe osawerengeka, ndiye kuti chiwopsezochi chiyenera kutsekedwa.
kukhazikitsidwa kwa nginx
Kuti tithane ndi zomwe zili pamwambapa timafunikira ma module awa a nginx:
ngx_http_image_filter_module - pakusintha kukula kwa zithunzi;ngx_http_proxy_module - kwa caching;ngx_http_secure_link_module - kuteteza ku spam;
Ma module ngx_http_image_filter_module ΠΈ ngx_http_secure_link_module sizinayikidwe mwachisawawa, chifukwa chake ziyenera kufotokozedwa pagawo lokonzekera nginx:
phoinix@phoinix-work:~/src/nginx-0.8.29
$ ./configure --with-http_secure_link_module --with-http_image_filter_module
nginx kasinthidwe
Timawonjezera chatsopano ku kasinthidwe kathu kolandira malo ndi magawo onse a 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;
}
...
}
...
Timawonjezeranso wolandila watsopano ku 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; }
}
Zotsatira zake, zithunzi zowonjezera zitha kupezeka pogwiritsa ntchito maulalo awa:
myproject.ru/preview/i [md5]/[path_to_image]myproject.ru/preview/c [md5]/[size]/[path_to_image]myproject.ru/preview/r [md5]/[size]/[path_to_image]
* try_files - tcheru ku malo ndi zilembo za Chirasha, kotero ndimayenera kupanga ndodo alias.
Gwiritsani ntchito pa intaneti
Pamlingo wogwiritsa ntchito intaneti, mutha kuchita izi (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'
);
Ngakhale ndingalimbikitsenso kuwerengera kukula kwake chithunzithunzi.
Makoswe
Mukachotsa chithunzi choyambirira, zowonetseratu, mwachibadwa, sizidzachotsedwa ku cache mpaka cache itachotsedwa, ndipo kwa ife, zowonetseratu zikhoza kukhalapo kwa tsiku limodzi pambuyo pochotsa, koma iyi ndi nthawi yochuluka.
Source: www.habr.com