Mantendo cabeçalhos durante a regravação do NGINX

1

Eu estou tentando configurar um proxy NGINX para redirecionar todas as solicitações para um dos dois servidores com base no conteúdo de um argumento de string de consulta. Essencialmente:

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

deve redirecionar para

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

e

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

deve redirecionar para

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

Parece que tenho uma configuração que faz o trabalho básico de reescrever o nome do host e manter a string de consulta intacta:

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;
        }
    }
}

No entanto, não consigo obter todos os cabeçalhos na solicitação original para sobreviver à jornada. Por exemplo, o cabeçalho Authorization parece não chegar em https://[server].site.com/api/...

Meu entendimento é que todos os cabeçalhos foram mantidos por padrão? Isso não é verdade?

    
por JimmidyJoo 17.07.2017 / 17:12

1 resposta

1

Consegui fazer o que queria alcançar eliminando rewrite e substituindo-o por proxy_pass e resolver entries:

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

        resolver dns.site.com;
        proxy_pass $schemes://my.site.$arg_server.com$request_uri;
    }
    
por 17.07.2017 / 18:21