Nginx-Lua 将 Jpg/png 转 Webp

WebP图片格式与Nginx配置

WebP格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。Facebook Ebay等知名网站已经开始测试并使用WebP格式。需要 Chrome支持 。

目标:在访问 xxx.png/jpg.webp 时 ,自动从 xxx.png/jpg 生成 对应webp 图片,并且返回给请求,要求高速,Nginx-lua 可以将这一需求截断在 网络请求,并且 Lua 执行速度快。

Nginx配置

location ~ /img/article/(\d)+/ { # 按照自己的规则定义正则匹配
        expires 30d; # 设置资源缓存30天
        try_files $uri $uri/ @webp; # 如果文件不存在尝试生成 webp 图片
  }

  location @webp{
        if ($uri ~ "/([a-zA-Z0-9-_]+)\.(png|jpg|gif)\.webp") {
                content_by_lua_file "/usr/local/openresty/nginx/lua/webp.lua"; # 设置lua脚本path
        }
  }

Lua 脚本

function file_exists(name)
   local f=io.open(name,"r")
   if f~=nil then io.close(f) return true else return false end
end

local newFile = ngx.var.request_filename;
local originalFile = newFile:sub(1, #newFile - 5);
if not file_exists(originalFile) then
  ngx.exit(404);
  return;
end
 -- cwebp -q 50 2.png -o 2.webp
executeCmd = "cwebp -q 80 " .. originalFile  .. " -o " .. newFile
os.execute(executeCmd);

if file_exists(newFile) then
    ngx.exec(ngx.var.uri)
else
   --调试代码 start
   file = io.open ("/usr/local/openresty/nginx/logs/file.log" ,"a")
   file:write("\n")
   file:write(executeCmd)
   file:write("\n")
   file:write(originalFile)
   file:write("\n")
   file:write(newFile)
   file:write("\n")
   file:close()
   --调试代码 end
   ngx.exit(404)
end

图片效果和质量对比

效果:
这里写图片描述

大小:
这里写图片描述

server { listen 3193; server_name 124.222.167.234; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/124.222.167.234_3193; #CERT-APPLY-CHECK--START # 用于SSL证书申请时的文件验证相关配置 -- 请勿删除 include /www/server/panel/vhost/nginx/well-known/124.222.167.234.conf; #CERT-APPLY-CHECK--END #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; #SSL-END #ERROR-PAGE-START 错误页配置,可以注释、删除或修改 error_page 404 /404.html; #error_page 502 /502.html; #ERROR-PAGE-END #PHP-INFO-START PHP引用配置,可以注释或修改 include enable-php-00.conf; #PHP-INFO-END #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效 include /www/server/panel/vhost/rewrite/124.222.167.234.conf; #REWRITE-END #禁止访问的文件或目录 location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) { return 404; } #一键申请SSL证书验证目录相关设置 location ~ \.well-known{ allow all; } #禁止在证书验证目录放入敏感文件 if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) { return 403; } location /wss { proxy_pass http://124.222.167.234:10803/sqx_fast/; #通过配置端口指向部署websocker的项目 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; } # 另一个代理配置 location ^~/sqx_fast { proxy_pass http://124.222.167.234:10803/sqx_fast; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; error_log /dev/null; access_log /dev/null; } location ~ .*\.(js|css)?$ { expires 12h; error_log /dev/null; access_log /dev/null; } access_log /www/wwwlogs/124.222.167.234.log; error_log /www/wwwlogs/124.222.167.234.error.log; }修改
03-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值