nginx try_files addheader não funciona

3

Eu tenho um local simples usado para caches gerados pelo servidor:

location /api/get-hloc {


#add acccess-allow headers
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

#try cached files
        root /dev/shm/get-hloc/;
        try_files /$arg_hash.hloc /stocks/graphics/get-iis-graphic?$args;
}

O que isso faz? Ele simplesmente verifica se há um arquivo na memória, que pode ser servido para solicitação e, se não houver arquivo, tenta o local que realmente gera o arquivo para solicitações futuras e o serve para o cliente.

Tudo funciona conforme esperado, exceto a diretiva add_header , que é ignorada.

É possível adicionar cabeçalhos antes de tentar um novo local em try_files ou devo adicionar cabeçalhos apenas no local do ponto final?

    
por Denis Matafonov 21.06.2016 / 12:10

1 resposta

1

Tente adicionar "sempre" à diretiva add_header:

If the always parameter is specified (1.7.5), the header field will be added regardless of the response code.

Veja a documentação para obter mais detalhes.

Para o seu exemplo, seria assim:

location /api/get-hloc {
  #add acccess-allow headers
  add_header 'Access-Control-Allow-Origin' '*' always;
  add_header 'Access-Control-Allow-Credentials' 'true' always;
  add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
  add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type' always;

  #try cached files
  root /dev/shm/get-hloc/;
  try_files /$arg_hash.hloc /stocks/graphics/get-iis-graphic?$args;
}

Fique de olho no seguinte parágrafo da documentação:

There could be several add_header directives. These directives are inherited from the previous level if and only if there are no add_header directives defined on the current level.

Isso significa que, se você tiver diretivas add_header em um nível anterior (por exemplo, nível de servidor), elas serão ignoradas e somente as diretivas add_header dos níveis de local atual serão usadas.

    
por 25.06.2016 / 18:44

Tags