Como posso substituir o cabeçalho Access-Control-Allow-Origin na resposta do proxy com o nginx

2

Estou usando uma instância nginx simples para fazer proxy de chamadas REST para outro servidor. O objetivo do meu proxy é permitir o uso de cookies para autenticação. Eu tenho que trabalhar, exceto por um problema. O servidor que fornece o serviço REST está enviando o cabeçalho Access-Control-Allow-Origin * . Esse cabeçalho é muito permissivo para autenticação baseada em cookie. Eu preciso substituir esse cabeçalho por um que seja mais restritivo.

Aqui está um subconjunto da configuração do meu nginx:

map $http_origin $cors_header {
    default "";
    "~^https?://[^/]+\.mydomain\.com(:[0-9]+)?$" $http_origin;
}

server {    
    location / {
        proxy_pass https://myrestserver.com/api;
        add_header Access-Control-Allow-Origin $cors_header;
        add_header Access-Control-Allow-Credentials true;
    }
}

Meu problema é que acabo com dois Access-Control-Allow-Origin cabeçalhos presentes na minha resposta. Como posso substituir o cabeçalho que retorna do servidor REST para que apenas minha versão do cabeçalho esteja presente na resposta final?

    
por Michael Taylor 25.01.2016 / 22:46

2 respostas

4

A melhor coisa a fazer seria alterar a resposta no lado do servidor REST, mas, supondo que você não tenha controle sobre o servidor REST, existe um módulo para o Nginx que pode modificar os cabeçalhos chamados ngx_headers_more: link

Você terá que instalar o módulo (isso provavelmente envolverá construir o nginx a partir da fonte e adicionar o módulo em ./configure, conforme descrito no readme do github). Para o seu problema específico, uma vez instalado, você pode adicionar esta diretiva em qualquer bloco

more_set_headers "Access-Control-Allow-Origin: $cors_header"
    
por 25.01.2016 / 22:56
-1

isso funciona sem módulos nginx extras

proxy_hide_header 'access-control-allow-origin';
add_header 'access-control-allow-origin' '*';
    
por 23.08.2018 / 14:24

Tags