NGINX 重写期间保留标头

NGINX 重写期间保留标头

我正在尝试设置一个 NGINX 代理,根据查询字符串参数的内容将所有请求重定向到两个服务器之一。本质上:

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

应该重定向到

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

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

应该重定向到

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

我似乎有一个配置,可以完成重写主机名和保持查询字符串完整的基本工作:

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/...

我的理解是所有标头都默认保留?难道不是吗?

答案1

通过删除rewrite并替换它proxy_passresolver条目,我能够实现我想要实现的目标:

    location /api/ {
        if ($arg_server !~ "^(a|b)$") { return 404; }

        resolver dns.site.com;
        proxy_pass $schemes://my.site.$arg_server.com$request_uri;
    }

相关内容