Nginx Reverse Proxy: post_action se o cache do proxy for atingido - Possbile?

4

Descobrimos recentemente sobre nginxes post_action .

Nós estávamos nos perguntando se havia uma maneira de usar essa diretiva se um hit do cache de proxy fosse feito?

O fluxo que esperávamos é o seguinte:

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

Alguma idéia se isso é possível via post_action ou qualquer outro método?

O raciocínio por trás disso é o seguinte:

Em essência, gostaríamos de modificar a sessão de usuários (php, mas o mesmo conceito pode ser aplicado à maioria das linguagens do lado do servidor) ao exibir conteúdo em cache. Isso aumentaria muito o número de solicitações armazenáveis em cache que processamos, uma vez que essas solicitações apenas gravam em sessões, não sendo lidas a partir delas.

Obrigado!

    
por anonymous-one 08.09.2012 / 15:47

2 respostas

1

Se você não resolveu ainda, aqui está o exemplo de configuração que satisfaz seus requisitos:

server {
    listen 80;
    server_name img1.example;
    root /var/www/images;
    location / { // Users request comes in
        try_files $uri @proxy; // If cache HIT goto A (show) / If cache MISS goto B (@proxy), server cached result
        post_action /url.php; // post_action to another url on the backend
    }

    location @proxy {
        proxy_pass http://static.exmaple; // Server request from backend
        proxy_store /var/www/images$uri; // Store result from backend (cache)
    }
}

    
por 16.09.2012 / 22:12
0

Eu não testei isso, mas você pode conseguir isso com 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
}

Outra suposição que estamos fazendo é que o post_action recebe todos os cabeçalhos HTTP da solicitação pai.

    
por 12.09.2012 / 13:32