nginx 记录完整的 proxy_pass 到日志中

nginx 记录完整的 proxy_pass 到日志中

给定具有 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 

我对重写规则还很陌生,来自微软,所以我一直在阅读 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"'
                                '}'
                              '}'
                            '}';```

答案1

要记录完整的请求 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" "-"

相关内容