Назад | Перейти на главную страницу

Прокси-сервер запросов и ответов журнала Nginx

У меня есть конфигурация для перенаправления всех моих локальных вызовов API (от клиента с заголовком apikey) на example.com на удаленный сервер API 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;                                                 
    }
}

Я хочу записать: - Запрос на отправку с локального сервера на / api - Запрос, отправленный Nginx на http://$api_route/$path$is_args$args - Ответ, полученный от удаленного API и переданный Nginx на мою клиентскую страницу

В тот момент, когда я вызываю / api, выдается ошибка удаленного API, а затем время ожидания моего запроса. Знание того, что отправлено / получено Nginx, поможет мне отладить.

Как я могу вести такой журнал?

ОП, добро пожаловать в сбой сервера! К вашему сведению, прислушайтесь к советам @ MichaelHampton и трижды проверьте свои инстинкты. В этом случае журнал доступа действительно делает предоставить вам информацию, которую вы, вероятно, захотите. Тебе просто нужно скажи это что именно вы хотите зарегистрировать.

Чтобы расширить предложение М. Хэмптона, вам следует определить собственный формат журнала для восходящего / прокси-журналирования, а затем добавить access_log директива к месту, из которого вы делаете proxy_pass используя свой собственный формат журнала.

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

И вы можете включить любые переменные из nginx в свой формат журнала. Вам нужно будет указать, какие заголовки вы хотите индивидуально из восходящего потока используя переменные здесь, например $upstream_http_server. Вот один из предлагаемых форматов ведения журнала для записи восходящей информации, которую вы можете использовать в качестве отправной точки.

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

Немного погуглив и прочитав документацию (и послушав М. Хэмптона!), Вы пройдете долгий путь. Удачи!