Назад | Перейти на главную страницу

Заголовок условного принятия nginx

Некоторые мобильные устройства отправляют на наши серверы следующие неверные запросы:

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

Пустой заголовок Accept заставляет наш сервер Ruby on Rails возвращать ошибку 500.

В Apache следующая директива позволяет нам переписывать заголовок перед его отправкой на сервер RoR приложения, чтобы справиться с неисправными устройствами:

    RequestHeader edit Accept ^$ "*/*" early

В настоящее время мы настраиваем nginx, но добиться того же обходного пути оказывается сложно. Мы можем установить:

  proxy_set_header Accept */*;

Однако, похоже, это необходимо делать безоговорочно. Когда бы вы ни пытались сделать:

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

Он жалуется с сообщением:

"proxy_set_header" directive is not allowed here

Итак, используя nginx, как мы можем установить для заголовка HTTP Accept значение */* когда он пуст перед отправкой запроса на сервер приложений?

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

server {

    ...

    proxy_set_header Accept $accept_header;
}

Попробуй это

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