Nginx 反向代理:如果代理缓存命中,则执行 post_action —— 可能吗?

Nginx 反向代理:如果代理缓存命中,则执行 post_action —— 可能吗?

我们最近发现了 nginxespost_action

我们想知道,如果代理缓存命中,是否有办法使用该指令?

我们希望的流程如下:

1) User request comes in
2) If cache HIT goto A / If cache MISS goto B

A) 1) Serve Cached Result
A) 2) post_action to another url on the backend

B) 1) Server request from backend
B) 2) Store result from backend

有什么想法是否可以通过 post_action 或任何其他方法实现?

其背后的原因如下:

我们本质上想在显示缓存内容时修改用户会话(php,但相同的概念可以应用于大多数服务器端语言)。这将大大增加我们处理的可缓存请求的数量,因为这些请求只写入会话,而不是从会话中读取。

谢谢!

答案1

如果您还没有解决这个问题,这里有一个符合您要求的示例配置:

服务器 {
    听80;
    服务器名称img1.example;
    根目录/var/www/图像;
    location / { // 用户请求进入
        try_files $uri @proxy; // 如果缓存命中,则转到 A(显示)/ 如果缓存未命中,则转到 B(@proxy),服务器缓存结果
        post_action /url.php; // post_action 到后端的另一个 url
    }

    位置@proxy {
        proxy_pass http://static.exmaple; //来自后端的服务器请求
        proxy_store /var/www/images$uri; // 存储后端的结果(缓存)
    }
}

答案2

我还没有测试过,但你可以用try_files

location / {
  post_action /update-session;
  try_files $uri @cachemiss;
}

location @cachemiss {
  #pass to relevant backend
  post_action off; #this may or may not be needed... is post_action cleared when we change location blocks?
}

location /update-session {
  #pass to session update script
}

我们做出的另一个假设是 post_action 接收与父请求相同的所有 HTTP 标头。

相关内容