nginx condicional Aceitar cabeçalho

3

Alguns dispositivos móveis enviam as seguintes solicitações incorretas para nossos servidores:

GET / HTTP/1.0
Accept:
User-Agent : xxx

O cabeçalho Accept vazio faz com que nosso servidor Ruby on Rails retorne um erro 500.

No Apache, a seguinte diretiva nos permite reescrever o cabeçalho antes de enviá-lo para o servidor RoR do aplicativo, a fim de lidar com os dispositivos quebrados:

    RequestHeader edit Accept ^$ "*/*" early

Atualmente, estamos configurando o nginx, mas a obtenção da mesma solução alternativa está se mostrando difícil. Somos capazes de definir:

  proxy_set_header Accept */*;

No entanto, isso parece ter que ser feito incondicionalmente. Sempre tentando fazer:

if ($http_accept !~ ".") {
  proxy_set_header Accept */*;
}

Ele reclama com a mensagem:

"proxy_set_header" directive is not allowed here

Então, usando o nginx, como podemos definir o cabeçalho HTTP Accept como */* quando estiver vazio antes de enviar o pedido para o servidor de aplicativos?

    
por manu_v 30.11.2012 / 10:45

2 respostas

2

Tente isso

set $acceptHeader $http_accept;
if ($acceptHeader !~ ".") {
  set $acceptHeader '/';
}
proxy_set_header Accept $acceptHeader;
    
por 30.11.2012 / 11:22
4
map $http_accept $accept_header {
    default $http_accept;
    ""      */*;    
}

server {

    ...

    proxy_set_header Accept $accept_header;
}
por 01.12.2012 / 04:32