Nginx condicional não está avaliando corretamente

1

Estou me deparando com um problema estranho com o nginx e como ele avalia os condicionais.

Veja a configuração relevante:

set $cors FALSE;
if ($http_origin ~* (http://example.com|http://dev.example.com:8000|http://dev2.example.com)) {
  set $cors TRUE;
}

if ($request_method = 'OPTIONS') {
  set $cors $cors$request_method;
}

if ($cors = 'TRUE') {
  add_header 'Access-Test'    "$cors";
  add_header 'Access-Control-Allow-Origin'    "$http_origin";
  add_header 'Access-Control-Allow-Methods'   'POST, OPTIONS';
  add_header 'Access-Control-Max-Age'         '1728000';
}

if ($cors = 'TRUEOPTIONS') {
  add_header 'Access-Test'    "$cors";
  add_header 'Access-Control-Allow-Origin'    "$http_origin";
  add_header 'Access-Control-Allow-Methods'   'POST, OPTIONS';
  add_header 'Access-Control-Allow-Headers'   'X-Requested-With, X-Prototype-Version';
  add_header 'Access-Control-Max-Age'         '1728000';
  add_header 'Content-Type'                   'text/plain';
}

Assim, os bloqueios condicionais nunca são acionados.

Quando removo as condições, vejo que o cabeçalho "Access-Test" e o "Access-Control-Allow-Origin" estão definidos corretamente, mas, conforme observado, a ativação dos condicionais faz com que os cabeçalhos não sejam enviados. / p>

Estou testando executando:

curl -Iv -i --request "OPTIONS" -H "Origin: http://example.com" http://staging.example.com/

Estou sentindo falta de algo óbvio? Eu tentei o "if" com e sem aspas, etc.

Este é o nginx 1.2.9.

    
por cjc 26.06.2013 / 15:01

1 resposta

2

OK, aparentemente, precisei adicionar instruções "return" explícitas nos blocos condicionais antes que as linhas add_header fossem acionadas corretamente.

Então, algo como:

if ($cors = 'TRUEOPTIONS') {
  add_header 'Access-Test'    "$cors";
  add_header 'Access-Control-Allow-Origin'    "$http_origin";
  add_header 'Access-Control-Allow-Methods'   'POST, OPTIONS';
  add_header 'Access-Control-Allow-Headers'   'X-Requested-With, X-Prototype-Version';
  add_header 'Access-Control-Max-Age'         '1728000';
  add_header 'Content-Type'                   'text/plain';

  return 204;

}
    
por 26.06.2013 / 22:16

Tags