Учитывая следующее расположение с 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" "-"