Σχεδόν σε οποιαδήποτε εφαρμογή Ιστού που χρησιμοποιεί εικόνες, υπάρχει ανάγκη δημιουργίας μικρών αντιγράφων αυτών των εικόνων και συχνά υπάρχουν πολλές μορφές για πρόσθετες εικόνες.
Η προσθήκη νέων διαστάσεων σε μια υπάρχουσα εφαρμογή προκαλεί επίσης κάποιους πονοκεφάλους. Εξ ου και το καθήκον:
Έργο
Ας υποδηλώσουμε τη λίστα απαιτήσεων:
Δημιουργήστε πρόσθετες εικόνες οποιασδήποτε μορφής εν κινήσει χωρίς να εισάγετε πρόσθετες λειτουργίες στην εφαρμογή ανά πάσα στιγμή κατά τη διάρκεια της ύπαρξης της εφαρμογής.
Δεν χρειάζεται να δημιουργούνται πρόσθετες εικόνες σε κάθε αίτημα.
Απενεργοποιήστε τη δυνατότητα δημιουργίας πρόσθετων εικόνων απροσδιόριστων μορφών.
Θα εξηγήσω το τελευταίο σημείο, γιατί έρχεται ελαφρώς σε αντίθεση με το πρώτο σημείο. Εάν κάνουμε τη δημιουργία οποιωνδήποτε εικόνων ανοιχτή, τότε υπάρχει πιθανότητα επίθεσης στον ιστότοπο δημιουργώντας μεγάλο αριθμό αιτημάτων για αλλαγή μεγέθους της εικόνας σε άπειρο αριθμό μορφών, επομένως αυτή η ευπάθεια πρέπει να κλείσει.
διαμόρφωση εγκατάστασης nginx
Για να λύσουμε τις παραπάνω απαιτήσεις χρειαζόμαστε το ακόλουθο σύνολο ενοτήτων nginx:
Ενότητες ngx_http_image_filter_module и ngx_http_secure_link_module δεν είναι εγκατεστημένα από προεπιλογή, επομένως πρέπει να καθοριστούν στο στάδιο διαμόρφωσης της εγκατάστασης nginx:
Προσθέτουμε ένα νέο στη διαμόρφωση του κεντρικού υπολογιστή μας τοποθεσία και γενικές παράμετροι κρυφής μνήμης:
...
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;
}
Αν και θα συνιστούσα επίσης τον υπολογισμό των μεγεθών Προεπισκόπηση.
Ρακέτα
Κατά τη διαγραφή της αρχικής εικόνας, οι προεπισκοπήσεις, φυσικά, δεν θα διαγραφούν από την κρυφή μνήμη μέχρι να ακυρωθεί η προσωρινή μνήμη, και στην περίπτωσή μας, οι προεπισκοπήσεις μπορεί να υπάρχουν για μια ημέρα μετά τη διαγραφή, αλλά αυτός είναι ο μέγιστος χρόνος.