WebP 真是个好东西,质量高,文件又小,一个几MB的png能压到几百几十Kb去,节省流量,提高网站访问速度,可是又费事将网站里所有图片转换成webp再上传,真是太麻烦了,所以有什么东西能实时将所有图片请求转换成webp输出就好了
最近看到一个github上的demo,叫做WebP_Server_Go,可以无缝将网站上已有图片转换为 WebP 格式输出,同时不改变原始图片链接,妙极了,试试
LINK:https://github.com/webp-sh/webp_server_go
自己根据实际情况下载demo对应版本,丢到服务器里,我这里将它重命名为webp-server

SSH下cd到 webp-server 所在目录,让程序自己创建一个样本配置文件
./webp-server -dump-config > config.json
webp-server
是程序的文件名,这个根据自己实际修改

在 webp-server 所在目录下看到多出了config.json文件及pic文件夹,编辑 config.json文件

{
"HOST": "127.0.0.1",
"PORT": "3333",
"QUALITY": "80",
"IMG_PATH": "/www/wwwroot/rosmontis.net",
"EXHAUST_PATH": "/www/webp",
"ALLOWED_TYPES": ["jpg","png","jpeg","bmp"]
}
配置文件内容根据自己网站情况对应修改。
host
是监听地址,默认本机一般不用改
port
是端口,这个可以自己设定,注意由于是本地调用,防火墙是不需要放行此端口的 。
quality
是转换质量,数字越大画质越好,一般来说默认的 80 差不多就刚好了,具体看自己需求。
img_path
是网站图片存储路径,这个只需要设定到网站所在的目录即可,具体目录会通过 nginx 规则匹配。
exhaust_path
是转换后的缓存输出目录,转换后的图片缓存会放在这里,这个根据自己情况设定,我这里设定在/www/webp 。
allowed_types
这个就不用多说了,指定要转换的源图片格式,一般网站也就这几种格式居多,正常来说不用改。

改完配置文件就保存关闭,然后去修改网站的 nginx 配置文件,添加以下内容:
location ^~ /wp-content/uploads/ {
proxy_pass http://127.0.0.1:3333;
}
我这里是 wordpress 网站,所以监控/wp-content/uploads/目录,效果如下图:

改完保存,重载 nginx 配置即可。
然后可以先运行测试一下,给程序执行权限:
chmod +x webp-server
直接执行,根据自己 config 文件目录修改 :
./webp-server --config /www/wwwroot/rosmontis.net/web_server/config.json
显示如下

要是报错就看看是不是配置文件写错了,看看图片缓存文件夹有没有不存在
然后网站上找几个有图片的页面打开,ssh 里如果看到如下图这种 save to 的记录,就是成功转换图片了:

测试运行正常的话就可以 Ctrl+C 先退出了,来准备将其添加到开机自启,用 systemd 来管理。
在程序目录运行以下命令,让它创建一个样本服务文件:
./webp-server -dump-systemd > /lib/systemd/system/webp.service
然后去/lib/systemd/system/目录下,编辑 webp.service 文件,文件样例内容如下:
[Unit]
Description=WebP Server Go
Documentation=https://github.com/webp-sh/webp_server_go
After=nginx.target
[Service]
Type=simple
StandardError=journal
WorkingDirectory=/opt/webps
ExecStart=/opt/webps/webp-server --config /opt/webps/config.json
Restart=always
RestartSec=3s
[Install]
WantedBy=multi-user.target
WorkingDirectory 和 ExecStart 都设定成程序目录,这是我的配置:
[Unit]
Description=WebP Server Go
Documentation=https://github.com/webp-sh/webp_server_go
After=nginx.target
[Service]
Type=simple
StandardError=journal
WorkingDirectory=/www/wwwroot/rosmontis.net/web_server
ExecStart=/www/wwwroot/rosmontis.net/web_server/webp-server --config /www/wwwroot/rosmontis.net/web_server/config.json
Restart=always
RestartSec=3s
[Install]
WantedBy=multi-user.target
保存退出,然后重新加载服务配置:
systemctl daemon-reload
启动程序:
systemctl start webp.service
再查看一下程序状态:
systemctl status webp.service
显示绿色 running 的话就是正在运行了:

再次打开浏览器这类测试转换效果,一切正常的话就可以添加到开机自启了:
systemctl enable webp.service
这下有没有感觉打开网页像在飞?
原创文章,作者:Rosmontics,如若转载,请注明出处:https://rosmontis.com/archives/86