Solicitação de log Nginx e proxy de resposta da API

4

Eu tenho uma configuração para redirecionar todas as minhas chamadas de API locais (de um cliente, com um cabeçalho de apikey) em example.com para um servidor de API remoto distant-api-server.com:8000 ).

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

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

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

        error_page 501 /501_apikey.html;                                    

        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT';
        add_header 'Access-Control-Allow-Headers' 'apikey';
        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;                                   
        proxy_redirect off;                                                 
    }
}

Gostaria de registrar:  - Solicitar envio do servidor local para / api  - Solicitação como enviada pelo Nginx para http://$api_route/$path$is_args$args  - Resposta recebida da API distante e transmitida pelo Nginx para a página do meu cliente

No momento em que faço chamadas para / api, ocorre um erro na API distante e, em seguida, meu pedido é encerrado. Saber o que é enviado / recebido pelo Nginx me ajudaria a depurar.

Como posso alcançar esse tipo de registro?

    
por BlackHoleGalaxy 04.01.2017 / 16:21

1 resposta

6

OP, Bem-vindo à falha do servidor! Para mais informações, ouça o conselho do @MichaelHampton e triplique seus instintos. Nesse caso, o log de acesso realmente faz fornecer as informações que você deseja. Você só precisa informar o que você deseja que esteja logado.

Para expandir a sugestão de M Hampton, o que você deve fazer é definir seu próprio formato de registro para registro de upstream / proxy e depois adicionar a diretiva access_log ao local do qual você está fazendo proxy_pass usando seu formato de registro personalizado.

location ~ /api/(?<path>.*) {
    log_format upstream_logging . . .;
    . . .
    access_log /var/log/nginx/api_logging.log upstream_logging;
}

E você pode incluir quaisquer variáveis do nginx que você quiser no seu formato de log. Você terá que especificar quais cabeçalhos deseja individualmente do upstream usando as variáveis aqui , por exemplo %código%. Aqui está um formato de registro proposto para o registro de informações de upstream que você pode usar como ponto de partida.

log_format upstream_logging '[$time_local] $remote_addr - $remote_user - $server_name to: $upstream_addr: $request upstream_response_time $upstream_response_time msec $msec request_time $request_time';

Um pouco de pesquisando e lendo os documentos (e ouvindo M Hampton!) vai te levar muito longe. Boa sorte!

    
por 05.01.2017 / 06:48

Tags