如何在nginx中设置上游响应的默认头?

zbq4xfa0  于 2023-02-21  发布在  Nginx
关注(0)|答案(1)|浏览(237)

我想确保至少默认的头值总是从上游返回。即使上游不可用,这会导致错误5xx。
现在我已经尝试了这些nginx配置选项:

server {
  ...
  #add_header "Access-Control-Allow-Origin" "*"; №0
  #add_header "Access-Control-Allow-Origin" "*" always; №1
  #more_set_headers "Access-Control-Allow-Origin: *"; №2
  #more_set_headers -s '403 500 502 504 503' "Access-Control-Allow-Origin: *"; №3

  location /upstream {
    proxy_pass http://localhost:1234;
  }
  ...
}

所有选项都存在问题:

  • No0:复制标题,在5xx的情况下不会返回任何标题。
  • 1:复制标题
  • 2:覆盖上游标题
  • 3:如果上游以一个好的http代码结束,但是没有返回一个头,它将不添加一个头。

我想我快找到正确的解决办法了,但我找不到。

xsuvu9jc

xsuvu9jc1#

下面的map使用正则表达式/.+/来检查是否定义了Access-Control-Allow-Origin标头。如果定义了,则将其值赋给$acao自定义变量。否则,将默认值*赋给$acao;
为避免重复,请使用proxy_hide_header
最后,使用$acao变量content添加标题。

http {
  map $upstream_http_access_control_allow_origin $acao {
    ~.+ $upstream_http_access_control_allow_origin;
    default '*';
  }

  server {
    #…
    proxy_hide_header Access-Control-Allow-Origin;
    add_header Access-Control-Allow-Origin $acao always;
  
    location /upstream {
      proxy_pass http://localhost:1234;
    }
}

相关问题