Nginx反向代理图片服务器+生成缩略图+图片缓存配置(docker版本)

 

#创建nginx目录

mkdir -p /app/nginx
mkdir -p /app/nginx/html
mkdir -p /app/nginx/cache/files
chmod -R 777 /app/nginx
#user  nobody;
worker_processes  auto;

#读取image_filter动态模块(必须!并且本项需要新版nginx docker官方镜像!本实例版本1.19.5)
load_module /etc/nginx/modules/ngx_http_image_filter_module.so;



#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    #include       mime.types;
    #default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    
    #缓存配置
    proxy_cache_path cache/files keys_zone=files_cache:100m max_size=10g inactive=60m levels=1:2;

    #配置项说明如下:
    # /path/to/cache  #本地路径,用来设置Nginx缓存资源的存放地址
    #levels          #默认所有缓存文件都放在同一个/path/to/cache下,但是会影响缓存的性能,因此通常会在/path/to/cache下面建立子目录用来分别存放不同的文件。假设levels=1:2,Nginx为将要缓存的资源生成的key为f4cd0fbc769e94925ec5540b6a4136d0,那么key的最后一位0,以及倒数第2-3位6d作为两级的子目录,也就是该资源最终会被缓存到/path/to/cache/0/6d目录中
    #keys_zone        #在共享内存中设置一块存储区域来存放缓存的key和metadata(类似使用次数),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key
    #max_size        #最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除最少使用的cache文件
    #inactive        #未被访问文件在缓存中保留时间,本配置中如果60分钟未被访问则不论状态是否为expired,缓存控制程序会删掉文件。inactive默认是10分钟。需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件
    #use_temp_path   #如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝
    #proxy_cache     #启用proxy cache,并指定key_zone。另外,如果proxy_cache off表示关闭掉缓存。

    #前端服务
    server {
        listen       80;
        server_name  front-server;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

      #添加本服务全局缓存设置
      proxy_cache files_cache;
	  proxy_cache_valid  200 206 304 301 302 10d;
	  proxy_cache_key $uri;
	  proxy_set_header Host $host:$server_port;
	  proxy_set_header X-Real-IP $remote_addr;
	  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

       location ~ /files/fetch/(.*)_(\d+)x(\d+) {
	        proxy_pass http://localhost:81;
        }
	  
	   location /files/fetch/ {
	        proxy_pass http://192.168.1.220:10026/files/fetch/;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

    #图片过滤器服务
    server {
        listen       81;
        server_name  img-filter-server;

       location ~ /files/fetch/(.*)_(\d+)x(\d+) {
             set $s $1;
             set $w $2;
             set $h $3;
	        image_filter resize $w $h;
	        proxy_pass http://192.168.1.220:10026;
	        rewrite ^/files/fetch/(.*)$ /files/fetch/$s break;
	  
        }

    }



}

 

docker run -d \
-p 80:80 \
-p 443:443 \
-v /app/nginx/cache/files:/etc/nginx/cache/files \
-v /app/nginx/html:/usr/share/nginx/html \
-v /app/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
--restart=always \
--name nginx \
nginx:alpine

 

你可能感兴趣的:(docker,nginx,nginx)