如果请求从一个应用程序传递到另一个应用程序,如何获取真实的客户端 ip 地址?
How to get the real client ip address if request was passed from one app to another?
我们有一个前端应用程序 A (staticfile_buildpack),它将所有 REST 请求转发到后端应用程序 B (nodejs-buildpack)。我们如何在应用程序 B 中获取真实的客户端 IP 地址?
我希望客户端 IP 在 x-forwarded-for header.
应用 A 的 NGINX 配置:
location ~ ^/rest/(.*)$ {
resolver 8.8.8.8 ipv6=off; # Google DNS
proxy_pass https://app-b.scapp.io/rest/$is_args$args;
在应用程序 B 中收到请求 headers:
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'
我最终选择的解决方案是使用@RichardSmith 提出的自定义 header。但是使用其他名称很重要,因为我的负载均衡器覆盖了 X-Forwareded-For header.
我们有一个前端应用程序 A (staticfile_buildpack),它将所有 REST 请求转发到后端应用程序 B (nodejs-buildpack)。我们如何在应用程序 B 中获取真实的客户端 IP 地址? 我希望客户端 IP 在 x-forwarded-for header.
应用 A 的 NGINX 配置:
location ~ ^/rest/(.*)$ {
resolver 8.8.8.8 ipv6=off; # Google DNS
proxy_pass https://app-b.scapp.io/rest/$is_args$args;
在应用程序 B 中收到请求 headers:
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'
我最终选择的解决方案是使用@RichardSmith 提出的自定义 header。但是使用其他名称很重要,因为我的负载均衡器覆盖了 X-Forwareded-For header.