如果请求从一个应用程序传递到另一个应用程序,如何获取真实的客户端IP地址?

时间:2019-04-29 07:16:31

标签: nginx swisscomdev

我们有一个前端应用程序A(staticfile_buildpack),它将所有REST请求转发到后端应用程序B(nodejs-buildpack)。我们如何在应用程序B中获取真实的客户端IP地址? 我希望在x-forward-for标头中有客户端IP。

应用A的NGINX配置:

location ~ ^/rest/(.*)$ {
  resolver        8.8.8.8 ipv6=off; # Google DNS
  proxy_pass      https://app-b.scapp.io/rest/$1$is_args$args;

在应用B中收到的请求标头:

host: 'app-b.scapp.io'
user-agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0',
accept: '*/*',
accept-encoding: 'gzip, deflate, br',
accept-language: 'de,en-US;q=0.7,en;q=0.3',
b3: 'af89bc574dc6b9e7-af89bc574dc6b9e7',
referer: 'https://app-a.scapp.io/',
x-b3-spanid: 'some-id',
x-b3-traceid: 'some-id',
x-cf-applicationid: 'some-id',
x-cf-instanceid: 'some-id',
x-cf-instanceindex: '1',
x-forwarded-for: '100.106.226.30, 100.106.132.129', // Swisscom IPs?
x-forwarded-proto: 'https, https',
x-request-start: '1556521740817',
x-vcap-request-id: 'some-id'

1 个答案:

答案 0 :(得分:1)

我最终选择的解决方案是使用@RichardSmith提出的自定义标头。但是使用另一个名称很重要,因为我的负载均衡器会覆盖X-Forwareded-For标头。