#创建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