1

在 Nginx 中,如何将 Googlebot 流量代理到 Varnish 后端,同时将所有其他流量保持在我的 PHP 后端?

我想要这样的东西:

try_files $uri $uri/ /index.php;
if ($http_user_agent ~* Googlebot) {
    proxy_pass http://varnish;
}
location ~* \.php$ {
    fastcgi_pass 127.0.0.1:9000;
}

但是,上述内容在上下文中不起作用,server因为在上下文中proxy_pass是不允许的server

如果我将上面的内容包装在一个location / {}块中,那么我if在一个location块内部就会产生if 邪恶。(我试过了,它有时会起作用,但它是断断续续的和不可预测的。)

有什么办法可以使这项工作?

4

1 回答 1

2

您可以使用错误页面在内部将流量路由到服务器块中的不同位置,然后使用该位置块代理清漆。

例子:

server {
    error_page 519 = @google;
    if ($http_user_agent ~* Googlebot) {
        return 519;
}
    location @google {
         proxy_pass http://varnish;
}
于 2013-10-17T21:00:45.497 回答