Nginx如何判断请求accept头含image/webp后再重定向图片请求?
Nginx 层实现Accept头校验的图片请求分流方案
该需求完全可以在Nginx层实现,核心通过Nginx内置的$http_accept变量获取请求头的Accept值,匹配image/webp标识后走不同的处理逻辑即可。
推荐使用map+if的组合方案,性能更稳定、后续可扩展性更强:
第一步:在Nginx全局http块中定义匹配规则
http { # 原有全局配置无需修改,新增以下map规则 map $http_accept $webp_support { default 0; ~*image/webp 1; } # server块及其他原有配置 server { # ... 你的原有站点配置 } }
第二步:修改你的现有图片location配置
location ~ \.(png|jpg|jpeg)$ { # 客户端支持webp时转发到目标服务器 if ($webp_support = 1) { proxy_pass http://你的目标服务地址; # 按需补充代理所需的请求头配置 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; break; } # 客户端不支持webp时直接返回本地静态文件 root /你的本地静态资源根目录; # 可按需添加静态资源缓存配置 expires 30d; add_header Cache-Control "public, no-transform"; }
注意事项
- 上述配置中
~*代表不区分大小写匹配,可兼容不同客户端的请求头写法 - 如果不需要全局复用webp匹配结果,也可以直接在location内判断,简化写法如下:
location ~ \.(png|jpg|jpeg)$ { # 不支持webp直接返回本地文件 if ($http_accept !~* "image/webp") { root /你的本地静态资源根目录; break; } # 支持webp走代理 proxy_pass http://你的目标服务地址; proxy_set_header Host $host; }
内容的提问来源于stack exchange,提问作者Levy Barbosa
相关产品推荐
相关产品推荐

