我有一个静态的图片站点,里面有大量图片,而且图片都比较大(5M到20M),琢磨着怎么减少图片大小,加快响应速度,减少流量占用。
考虑过以下办法:
1 让CDN压缩图像
我用的是 Cloudflare ,了解了一下,需要开通Pro用户,一个月要20美元,可以将图像转为Webp。
2 上传图片前先压缩好
这个不用钱,就是麻烦多了。需要自己压缩好。这样更新图像挺麻烦的。好处是服务器硬盘空间占用少。
3 Nginx上写Lua脚本干这个事
对Nginx的Lua编程不熟悉,而且看了看教程,好像不是那么方便。
4 自己写个网站,自己处理图片请求,在请求时转换,或者直接返回上次转换好的。
这个还是满足我的需求的,只是不太想写这样的,先网上找找。
还真的有这样的现成的,而且是用 Go写的,好部署。
项目在 https://github.com/webp-sh/webp_server_go
处理也方便:
1 建一个目录来放程序
cd /data/
mkdir webp
wget https://github.com/webp-sh/webp_server_go/releases/download/0.3.2/webp-server-linux-amd64
chmod +x webp-server-linux-amd64
2 创建配置运行文件
{
"HOST": "127.0.0.1",
"PORT": "3333",
"QUALITY": "80",
"IMG_PATH": "/data/sources",
"EXHAUST_PATH": "/data/image_webp",
"ALLOWED_TYPES": ["jpg","png","jpeg"]
}
QUALITY : 压缩质量
IMG_PATH: 图像源路径
EXHAUST_PATH: 压缩后的图像的存储路径
3 创建Supervisor守护配置
[program:webp]
directory=/data/webp
command=/data/webp/webp-server-linux-amd64 --config=/data/webp/config.json
autostart=true
autorestart=true
startsecs=10
4 启动
supervisorctl update
supervisorctl start webp
5 将NGINX的静态网站改为反向代理
结束。
再次在浏览器里访问图像,发现图像被压缩了,我这里实测一个10M的图像压缩为1M大小了,然后图像的文件名没变,但内容类型已成为webp了。
content-length: 1055446
content-type: image/webp