提供缓存的Googlebot清漆服务

时间:2015-03-02 10:45:00

标签: nginx varnish googlebot

我目前正在使用php5-fpm运行Nginx,我想在我的服务器设置中引入清漆,但我只想将清漆提供给Googlebot和Bingbot的缓存页面,其他任何人都通过缓存。

最好的方法是什么?将varnish作为前端运行或者将nginx作为前端运行并向varnish发送请求?我还需要实际的代码。

非常感谢任何评论

2 个答案:

答案 0 :(得分:1)

根据用户代理,您可以识别机器人并让varnish缓存响应。请参阅以下清漆库以获取更多信息https://github.com/varnish/varnish-devicedetect

但是我想知道你为什么要把清漆放在那里,特别是只能处理机器人。为什么不让nginx处理缓存(如果这甚至是一个实用的选项)。

答案 1 :(得分:1)

扩展Marcel的答案,你可以使用NGINX来处理Bots的响应缓存(不需要Varnish):

# Map any user agent not containing the word "bot"
map $http_user_agent $isNotBot {
  ~*bot    "";
  default  "IAmNotARobot";
}

# Where to store cached files (adjust to your liking)
proxy_cache_path /path/to/bot_cache
  levels=1:2
  keys_zone=bot_cache:10m
  max_size=1g
  inactive=30m
  use_temp_path=off;

server {
  ...
  location / {
    ...
    # Which cache to use
    fastcgi_cache bot_cache;

    # key to use for the cached copies (adjust to your needs)
    fastcgi_cache_key $host:$server_port:$request_uri;

    # Bypass the cache for humans
    fastcgi_cache_bypass $isNotBot;

    # Don't store/cache copies of requests from humans
    fastcgi_no_cache     $isNotBot;

    # Uses stale cached responses for various upstream errors
    # (ignored for humans)
    fastcgi_cache_use_stale error timeout updating http_500;

    # Disable getting gzipped files from back end
    # (only cache un-gzipped responses)
    fastcgi_set_header Accept-Encoding "";

    # upstream location
    fastcgi_pass http://upstream;
    ...
  }
  ...
}

fastcgi_替换为proxy_scgi_uwsgi_,具体取决于您使用的代理模块。