docker 安装nginx
docker pull nginx
#创建挂载mul
mkdir -p /data/docker/nginx/{conf,log,html}
# 生成容器
docker run --name nginx -p 9001:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /data/docker/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /data/docker/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /data/docker/nginx/
# 删除正在运行的nginx容器
docker rm -f nginx
# 生成容器
docker run -p 80:80 --name nginx -v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/docker/nginx/conf/conf.d:/etc/nginx/conf.d -v /data/docker/nginx/log:/var/log/nginx -v /data/docker/nginx/html:/usr/share/nginx/html -d nginx:latest
http_image_filter_module模块使用
实现图片缩放,缓存
#图片缓存地址
mkdir -p /data/docker/cache/files
vi nginx.conf
#读取image_filter动态模块(必须!并且本项需要新版nginx docker官方镜像!本实例版本1.23.3)
load_module /etc/nginx/modules/ngx_http_image_filter_module.so;
#缓存配置
proxy_cache_path cache/files keys_zone=files_cache:100m max_size=10g inactive=60m levels=1:2;
#配置项说明如下:
# proxy_cache_path #本地路径,用来设置Nginx缓存资源的存放地址
#levels #默认所有缓存文件都放在同一个/path/to/cache下,但是会影响缓存的性能,因此通常会在/path/to/cache下面建立子目录用来分别存放不同的文件。假设levels=2:2,Nginx为将要缓存的资源生成的key为f4cd0fbc769e94925ec5540b6a4136d0,那么key的最后两位d0,以及倒数第2-3位36作为两级的子目录,也就是该资源最终会被缓存到cache/files/d0/36目录中
#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表示关闭掉缓存。
参数判断
vi conf.d/default.conf
#使用参数判断是否使用缩略图
location ^~ /minioImg/ {
#缓存配置也可配置到server进行全局配置
proxy_cache files_cache;
proxy_cache_valid 200 206 304 301 302 10d;
#通过参数判断的所以key需要加上参数
proxy_cache_key $uri?$query_string;
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;
set $j 0;
if ( $query_string ~* (.*)h_([0-9]+),w_([0-9]+) ) {
set $h $2;
set $w $3;
set $j 1;
}
#如果没有使用缩略图就跳转到实际图片
if ( $j = '0') {
rewrite (.*)/minioImg/(.*)$ $1/minioImg1/$2 permanent;
}
image_filter resize $w -;
proxy_pass http://127.0.0.1:9000/;
image_filter_buffer 100M;
}
location ^~ /minioImg1/ {
proxy_pass http://127.0.0.1:9000/;
}
#生成容器
docker run -p 80:80 -p 81:81 --name nginx -v /data/docker/nginx/cache/files:/etc/nginx/cache/files -v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/docker/nginx/conf/conf.d:/etc/nginx/conf.d -v /data/docker/nginx/log:/var/log/nginx -v /data/docker/nginx/html:/usr/share/nginx/html -d nginx:latest