Nginx - 通过Nginx代理有条件地服务WebP

时间:2016-09-01 23:23:46

标签: node.js amazon-web-services nginx proxy

尝试在接受该mime类型的浏览器中有条件地提供WebP图像。我在现有的Nginx设置中实现已知解决方案时遇到问题。

我正在尝试使用以下方法实现WebP:

"<b>" + search + "</b>");

from here

但是试图找到一种方法将它与我现有的nginx配置一起使用,除了错误之外什么都没有。我现有的配置(带有Node.js的AWS Elastic BeanStalk上的Nginx代理)似乎被反向代理到node.js进程。

我需要将其放入现有的Nginx配置中,如下所示:

  map $http_accept $webp_suffix {
    "~*webp"  ".webp";
  }

  server {
    listen       8081;
    server_name  localhost;

    location / {
      try_files $uri$webp_suffix $uri =404;
    }
  }

如何在上述Nginx配置中实现try_files指令,以便有条件地为WebP图像提供服务?

1 个答案:

答案 0 :(得分:0)

使用命名位置作为try_files指令的默认操作(而不是=404响应)。有关详细信息,请参阅this document。例如:

map $http_accept $webp_suffix {
    "~*webp"  ".webp";
}

upstream nodejs {
    server 127.0.0.1:8081;
    keepalive 256;
}

server {
    listen 8080;

    root /path/to/document/root;

    location / {
        try_files $uri$webp_suffix $uri @nodejs;
    }

    location @nodejs {
        proxy_pass http://nodejs;
        proxy_set_header Connection "";
        proxy_http_version 1.1;
        proxy_set_header Host            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

如果在/path/to/document/root下面的目录结构中找到静态文件,有条件地附加.webp,则nginx将提供该文件。否则,控制权将被传递到指定位置,URI将被发送到node.js进程。