nginx cache + imageproxy+minio 支持多級cache的圖片縮放處理服務


以前有寫過簡單的基於imageproxy以及minio 的圖片縮放服務,以下是一個集成nginx cache 增強imageproxy 的多級cache 能力

參考圖

 

 


簡單說明:
iamgeproxy可以提供基於s3(minio)、內存、本地磁盤的cache 能力,同時我們的訪問入口基於nginx,同時基於nginx 的proxy cache 能力可以提供
多級的cache 處理

環境准備

  • docker-compose 文件
 
version: "3"
services: 
  pdf-proxy: 
    image: openresty/openresty:alpine
    volumes:
    - ./nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf
    - ./cache:/opt/nginx/data/cache
    ports: 
    - "80:80"
  minio: 
    image: minio/minio
    command: server /data
    volumes: 
    - "./data:/data"
    ports: 
    - "9000:9000"
    environment:
      - "MINIO_ACCESS_KEY=minio"
      - "MINIO_SECRET_KEY=minio123"
  imageproxy: 
    image: willnorris/imageproxy
    command: -addr 0.0.0.0:8080 -cache s3://us-east-1/demo/images?endpoint=minio:9000&disableSSL=1&s3ForcePathStyle=1 -userAgent "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5"
    environment:
    - "AWS_ACCESS_KEY_ID=minio"
    - "AWS_SECRET_KEY=minio123"
    ports: 
    - "8080:8080"
  • nginx 配置
    主要提供nginx 的rewrite 以及cache,rewrite 是提高imageproxy 請求路徑的靈活性,cache 是加速
 
worker_processes  1;
user root;  
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;
    proxy_cache_path  /opt/nginx/data/cache keys_zone=wximage:300m;
    real_ip_header     X-Forwarded-For;
    resolver 114.114.114.114 ipv6=off;          
    real_ip_recursive on;   
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        default_type text/html;
        location /wximage/ {
            proxy_redirect     off; 
            rewrite ^/wximage(.*) $1 break;
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
            proxy_set_header Host $proxy_host;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
            client_body_buffer_size 10M;
            client_max_body_size 10G;
            set $agent "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5";
            proxy_buffers 1024 4k;
            proxy_read_timeout 300;
            proxy_connect_timeout 80;
            proxy_set_header User-Agent $agent;
            proxy_pass http://imageproxy:8080;
            proxy_cache wximage;
            proxy_cache_key $scheme$proxy_host$uri$is_args$args;
            proxy_cache_valid  200 304 302 30d;   
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }    
    }    
}
  • 運行說明
    首先啟動monio創建相關的bucket,登錄browser就可以了
  • proxy 百度圖片的例子

圖片地址:https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1604414122241&di=89d0b74128a600ebf054830beabf3535&imgtype=0&src=http%3A%2F%2Fimg.pconline.com.cn%2Fimages%2Fupload%2Fupc%2Ftx%2Fwallpaper%2F1307%2F10%2Fc3%2F23153395_1373426315898.jpg
走nginx proxy 的地址(同時添加了一個方形圖片的處理)
http://localhost/wximage/500/https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1604414122241&di=89d0b74128a600ebf054830beabf3535&imgtype=0&src=http%3A%2F%2Fimg.pconline.com.cn%2Fimages%2Fupload%2Fupc%2Ftx%2Fwallpaper%2F1307%2F10%2Fc3%2F23153395_1373426315898.jpg
效果

 

 

minio cache

 

 


nginx cache

 

 

說明

通過imageproxy+minio 以及nginx 的cache 的好處很明顯,假如我們的網絡異常了,但是我們的圖片服務依然還是可以使用的
(因為有cache,而且是多級cache)

參考資料

https://www.cnblogs.com/rongfengliang/p/13168418.html
https://github.com/willnorris/imageproxy
https://github.com/rongfengliang/imageproxy-minio-learning
https://github.com/rongfengliang/openresty-imageproxy-minio


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM