nginx 条件接受标头

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 标头设置为空?

答案1

尝试这个

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

答案2

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

server {

    ...

    proxy_set_header Accept $accept_header;
}

相关内容