如何防止热链接但允许在nginx中使用google?

时间:2014-08-20 14:47:56

标签: nginx amazon-s3 reverse-proxy googlebot hotlinking

我想设置一个反向代理来提供存储在S3中的图像 如果referrer不是example.com,我不想允许访问图片 但是我想允许多个抓取工具,例如google bot,bing bot等(基于user_agent)来访问图像。
我还想让我的Android应用程序访问图像(基于自定义标题说X-Application: ExampleApp

如何配置nginx?

1 个答案:

答案 0 :(得分:1)

使用3 IF,由于IF限制而无法正常工作。 你可以做的是2件事,设置MAP来处理3个测试(设置true或false值)然后在服务器块内部使用Lua将3个测试值合并为一个并使用单个IF(或纯Lua)允许/拒绝访问的位置块。

map $referrer $usestring1 {
 default     0;
 ~^google$   1;
}
map $user_agent $usestring2 {
 default     0;
 ~^google$   1;
}
etc....

location / {
    content_by_lua '
      local s = ngx.var.usestring1;
      local t = ngx.var.usestring2;
      if s+t == 2 then return ngx.exit(503); end;
    ';
  etc...........