Hello! On Wed, Jan 12, 2022 at 12:44:34PM -0500, podzol33 wrote:
> We have an responseHeader with technical information sent by the upstream > server tomcat. > We want to log this information in nginx and delete the header to avoid to > be visible in the response Header to the client. > > log_format formatjson escape=json '{ > '"tomcat_container_id": "$TOMCAT_CONTAINER_ID" }'; > > Nginx.conf in http { > map $sent_http_Container_Id $TOMCAT_CONTAINER_ID { > default $sent_http_Container_Id; > } > more_clear_headers 'Container-Id'; > > When I do this, my log tomcat_container_id is empty. > If I comment the more_clear_header command line, I have my log fill with the > right value but the header is also sent to the client. > So I don’t understand why my $TOMCAT_CONTAINER_ID Is clear when I delete the > header and not clear if I don’t. Maps are evaluated when you access resulting variable, so it is expected that the map result will be empty if there are no $sent_http_container_id during map evaluation, that is, at logging. Overall, your construct is no different from using $sent_http_container_id in the log format directly. As far as I understand what you are trying to do, proper solution would be to void both 3rd-party more_clear_headers and map, and instead use proxy_hide_header[1] to hide the header, and use the $upstream_http_container_id[2] variable for logging the original upstream response header. Something like this: log_format formatjson escape=json '{ '"tomcat_container_id": "$upstream_http_container_id" }'; proxy_hide_header Container-Id; Hope this helps. [1] http://nginx.org/r/proxy_hide_header [2] http://nginx.org/r/$upstream_http_ -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx mailing list -- nginx@nginx.org To unsubscribe send an email to nginx-le...@nginx.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s