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

nginx log full proxy_pass to log

Учитывая следующее расположение с proxy_pass, я хочу зарегистрировать полный uri.

location ~* ^/?(foo/?.*$) {
    proxy_pass https://www.someserver.com/some-thing-else/$1;
    break;
}

Так, например, я бы хотел

https://www.originalserver.com/foo?page=5

перенаправить на

https://www.someserver.com/some-thing-else/foo?page=5

который, как я полагал, работал; Я думаю, что что-то еще позже по цепочке отбрасывает query_string.

Поэтому я хочу вывести в файл журнала именно то, что было передано. Я пробовал $ uri, $ proxy_host и $ upstream_addr, но не смог найти ничего, что возвращало бы полностью квалифицированный uri

https://www.someserver.com/some-thing-else/foo?page=5

Вместо этого я получаю:

proxy_host:  www.someserver.com 
upstream_addr:   123.45.67.890:443  
uri_path:    /foo   
uri_query:   page=5 

Я новичок в переписывании правил, пришедший из Microsoft, поэтому я читал исчерпывающие документы по nginx и поиску в Интернете, но не могу найти на это ответа. Любая помощь будет принята с благодарностью. Спасибо.

Приложение: это единственное правило из 7, при котором у меня возникают проблемы.

Дополнение Дополнение: это наш текущий формат журнала.

log_format json escape=json '{'
                              '"time_local": "$time_local",'
                              '"core": {'
                                '"site": "$server_name",'
                                '"server": "$host",'
                                '"dest_port": "$server_port",'
                                '"src_ip": "$realip_remote_addr",'
                                '"status": "$status",'
                                '"protocol": "$server_protocol",'
                                '"body_bytes_sent": "$body_bytes_sent",'
                                '"remote_addr": "$remote_addr",'
                                '"remote_user": "$remote_user",'
                                '"request": "$request",'
                                '"nginx_version": "$nginx_version",'
                                '"http": {'
                                  '"http_referer": "$http_referer",'
                                  '"http_user_agent": "$http_user_agent",'
                                  '"http_x_header": "$http_x_header",'
                                  '"uri_query": "$query_string",'
                                  '"uri_path": "$uri",'
                                  '"http_method": "$request_method",'
                                  '"response_time": "$upstream_response_time",'
                                  '"cookie": "$http_cookie",'
                                  '"request_time": "$request_time",'
                                  '"http_x_forwarded_for": 
                                  '"$http_x_forwarded_for",'
                                  '"proxy_host": "$proxy_host",'
                                  '"upstream_addr": "$upstream_addr"'
                                '}'
                              '}'
                            '}';```

Для регистрации полного URI запроса вы можете изменить свой log_format внутри http блок. Измените его на:

log_format  main  '$remote_addr - $remote_user [$time_local] "$host$request_uri" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

образец вывода:

1.1.1.1 - - [02/Aug/2019:20:32:36 +0200] "www.website.eu/index.php?param=some_param" 200 1238 "https://www.website.eu/" "Mozilla/5.0" "-"