By default nginx drops headers with underscores in their names, because underscores_in_headers is off. A client sending X_Custom_Token has that header silently removed before the request reaches the upstream, so the application sees it as absent.
The rationale is that underscores and hyphens are conflated by CGI-style environment variable mapping, which makes X_Forwarded_For and X-Forwarded-For indistinguishable to some backends and creates a header-spoofing vector.
Enable it with underscores_in_headers on; in the http or server block, understanding the ambiguity that reintroduces. The better fix is to rename the header to use hyphens, which is what the HTTP specification's own header names do throughout. Note that this setting is per server block and, importantly, is read from the default server for the port when a request arrives without a matching server name, so enabling it on one virtual host is not enough if requests can land on the default one. The related ignore_invalid_headers directive controls the broader class of malformed header names.