3

Some mobile devices send the following incorrect requests to our servers :

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

The empty Accept header causes our Ruby on Rails server to throw back a 500 error.

In Apache, the following directive allows us to rewrite the header before sending it to the application RoR server in order to cope with the broken devices :

    RequestHeader edit Accept ^$ "*/*" early

We're currently setting up nginx, but achieving the same work-around is proving difficult. We are able to set :

  proxy_set_header Accept */*;

However, this seems to have to be done inconditionally. Whenever trying to do :

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

It complains with the message :

"proxy_set_header" directive is not allowed here

So, using nginx, how can we set the HTTP Accept header to */* when it is empty before sending the request to the application server ?

manu_v
  • 133
  • 1
  • 5

2 Answers2

6
map $http_accept $accept_header {
    default $http_accept;
    ""      */*;    
}

server {

    ...

    proxy_set_header Accept $accept_header;
}
VBart
  • 8,309
  • 3
  • 25
  • 26
3

Try this

set $acceptHeader $http_accept;
if ($acceptHeader !~ ".") {
  set $acceptHeader '/';
}
proxy_set_header Accept $acceptHeader;
EricLarch
  • 154
  • 3