Nginx生成缩略图并存储到硬盘上

Nginx 是一个高性能的 HTTP 和反向代理服务器,同时也提供了一些扩展模块,如ngx_http_image_filter_module,可以用来处理图像,以下是如何使用 Nginx 生成缩略图并将其存储到硬盘上的步骤:
1. 安装必要的软件包
确保你的系统已经安装了 Nginx 和 ImageMagick,ImageMagick 是一个强大的图像处理工具,可以用于创建、编辑和合成图像。
sudo apt-get update sudo apt-get install nginx imagemagick
2. 配置 Nginx
编辑 Nginx 配置文件(通常位于/etc/nginx/nginx.conf 或/etc/nginx/sites-available/default),添加以下内容:
http {
...
server {
...
location /thumbnails/ {
alias /path/to/your/thumbnails/directory/;
error_page 405 =200 $uri;
}
location ~* \.(jpg|jpeg|png)$ {
set $thumbnail_width 100; # 设置缩略图宽度
set $thumbnail_height 100; # 设置缩略图高度
try_files $uri @thumbnail;
}
location @thumbnail {
rewrite ^(.*)\.(jpg|jpeg|png)$ $1.thumbnail.$2 break;
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
这里我们定义了一个名为/thumbnails/ 的位置块,它将请求重定向到指定的缩略图目录,我们还定义了一个正则表达式位置块,用于匹配图像文件,并将它们传递给名为@thumbnail 的命名位置块,在@thumbnail 块中,我们使用rewrite 指令来修改请求的 URL,以便将其重定向到带有.thumbnail 后缀的新 URL,我们将请求代理到本地的 ImageMagick 服务(假设它正在运行在端口 8080 上)。

3. 启动 ImageMagick 服务
为了将图像处理任务委托给 ImageMagick,我们需要启动一个 ImageMagick 服务,可以使用以下命令启动一个简单的 ImageMagick 服务:
convert -listen tcp://0.0.0.0:8080 &
这将在端口 8080 上启动一个监听所有 IP 地址的 ImageMagick 服务。
4. 重启 Nginx
重启 Nginx 以使更改生效:
sudo service nginx restart
当你访问一个图像文件时,例如http://your-domain.com/image.jpg,Nginx 会将其重定向到类似http://your-domain.com/image.thumbnail.jpg 的 URL,并在后台使用 ImageMagick 生成缩略图并将其保存到指定的目录。

常见问题与解答
Q1: 如果我想改变缩略图的大小,应该如何操作?
A1: 要改变缩略图的大小,只需修改 Nginx 配置文件中的$thumbnail_width 和$thumbnail_height 变量的值即可,如果你想生成宽度为 200px、高度为 200px 的缩略图,可以将这两个变量的值分别设置为 200。
Q2: 如果我希望缩略图保存在不同的目录中,应该如何操作?
A2: 要更改缩略图保存的目录,请修改 Nginx 配置文件中的alias 指令指向的路径,如果你想将缩略图保存在/path/to/another/directory/,则可以将alias 指令更改为alias /path/to/another/directory/;。