在NGINX重写期间保持标题

我试图build立一个NGINX代理,根据查询string参数的内容将所有请求redirect到两台服务器之一。 主要有:

https://my.site.com/api/...&server=a

应该redirect到

https://a.site.com/api/...&server=a

https://my.site.com/api/...&server=b

应该redirect到

https://b.site.com/api/...&server=b

我似乎有一个configuration,执行重写主机名和保持查询string完整的基本工作:

 error_log /dev/stdout info; worker_processes 1; events { worker_connections 1024; accept_mutex off; } http { access_log /dev/stdout combined; sendfile on; server { listen 443 ssl; server_name $hostname; ssl_certificate /etc/ssl/nginx.crt; ssl_certificate_key /etc/ssl/nginx.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; location ~ /api/ { if ($arg_server !~ "^(a|b)$") { return 404; } rewrite ^ $scheme://my.site.$arg_server.com$uri; } } } 

但是,我似乎无法得到原来的请求中的所有标题生存的旅程 – 例如, Authorization标题似乎并没有到达https://[server].site.com/api/...

我的理解是,所有的标题默认保存? 这不正确吗?

我能够做到我想通过摆脱rewriteproxy_passresolver条目实现:

  location /api/ { if ($arg_server !~ "^(a|b)$") { return 404; } resolver dns.site.com; proxy_pass $schemes://my.site.$arg_server.com$request_uri; }