Os dados de formulário proxy da API do Nginx e o cabeçalho personalizado não foram transmitidos para a API remota

1

Eu quero configurar um Nginx com esse propósito.

Contexto

  • Sirva o Angular 2 arquivos estáticos dist da URL raiz: link - > exibir o index.html em /home/www/index.html

  • No meu projeto Angular2, faço algumas chamadas localmente para /api/some-endpoints em GET, POST.

  • Eu quero que as chamadas para /api/{ANY-PATH} sejam redirecionadas como estão para um URL privado remoto. Preciso que a chamada seja feita com meus cabeçalhos personalizados (por exemplo, cabeçalho de dados de formulário ou apikey) E adicione outro apikey à solicitação para o servidor distante .

Meu problema

Ao fazer uma chamada POST (da máquina na qual o nginx está instalado) para /api/document , com valores de dados de formulário (contendo um arquivo carregado) e meu cabeçalho personalizado: apikey , 253018b8425f4eb08291a1b68c4bc328

O servidor distante parece não receber nem os dados do formulário nem o apikey.

Minha configuração

upstream api-server {
    server myprivate-api-server.com:8000;
}

map $http_apikey $api_route {
    default "error";
    253018b8425f4eb08291a1b68c4bc328 'api-server';
}

server {
        listen 80;
        index index.html;
        server_name example.com;

        location = /501_apikey.html {
                root /home/www/error_pages;
                internal;
        }

        location ~ /api/(?<path>.*) {

            if ($request_method = OPTIONS ) {           
                add_header 'Access-Control-Allow-Origin' "$http_origin";
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                add_header 'Access-Control-Allow-Headers' 'apikey';
                return 200;
            }

            if ($api_route = "error"){return 501;}

            set $clientapikey "hW4g5V60UT2O3iQP1PS2g29hKjQ403E5";
            error_page 501 /501_apikey.html;

            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT';
            add_header 'Access-Control-Allow-Headers' 'apikey';
            add_header 'clientapikey' $clientapikey;

            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-NginX-Proxy true;    
            proxy_pass http://$api_route/$path$is_args$args;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-Host $remote_addr;
            proxy_ssl_session_reuse off;
            proxy_set_header Host $http_host;
            add_header 'Access-Control-Allow-Headers' 'apikey';
            proxy_redirect off;
        }
}

Pergunta bônus

A minha maneira de adicionar a segunda chave do cliente é válida?

add_header 'clientapikey' $clientapikey;

Eu precisarei no futuro criar um local para cada um dos meus clientes, cada um com clientapikey diferente para identificá-los na API remota.

    
por BlackHoleGalaxy 04.01.2017 / 17:02

0 respostas

Tags