所以,我想将我的所有图像请求重定向到另一台服务器,但在执行此操作之前,我想检查请求的accept
标头上是否存在image/webp
,我计划在其他服务器上进行验证,但我认为最好在nginx中进行,有可能吗?
如果标题不存在,我只想保持原样(为静态图像服务(
这就是我所拥有的:
location ~ .(png|jpg|jpeg)$ {
proxy_pass ...;
}
您可以使用以下内容:
map $http_accept $local {
~image/webp '';
default $uri;
}
server {
...
location ~ .(png|jpe?g)$ {
try_files $local @remote;
}
location @remote {
proxy_pass ...
}
}
但是,如果在本地服务器上找不到请求的文件,则会将请求代理到远程服务器。如果它不适合你,其中一种可能的方法是使用邪恶的if
:
location ~ .(png|jpg|jpeg)$ {
if ($http_accept ~ image/webp) {
proxy_pass ...
}
}
这应该适用于现代nginx版本,if
在任何情况下都不是邪恶的,但这正是我最好避免它的地方
map $http_accept $locname {
~image/webp remote;
default local;
}
server {
...
location ~ .(png|jpe?g)$ {
try_files "" @$locname;
}
location @local {
# serve the file locally
}
location @remote {
proxy_pass ...
}
}