Некоторые мобильные устройства отправляют на наши серверы следующие неверные запросы:
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;