标签: x-forwarded-for

如何配置nginx X-Forwarded-Port为原始请求端口

我在标准反向代理场景中使用 nginx,将所有请求传递/auth到另一台主机,但是我正在尝试使用非标准端口。

我的最终目标是将X-Forwarded-Port标头设置为请求进入的端口。

这是我在 nginx.conf 中的位置块:

location /auth/ {
    proxy_pass       http://otherhost:8090;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port <VAR>;
}
Run Code Online (Sandbox Code Playgroud)

这个 nginx 运行在一个 docker 容器中,该容器被配置为将请求从 8085 转发到容器中的 80,这样 nginx 进程就可以监听 80:

0.0.0.0:8085->80/tcp

当我点击网址时:

http://localhost:8085/auth/

我正确重定向到http://otherhost:8090,但X-Forwarded-Port标题丢失或错误。

<VAR>原始块中,我尝试了以下操作:

  • $server_port - 这是 nginx 正在侦听的端口 (80),而不是请求端口。

  • $pass_port - 在我的设置中似乎为空,因此 nginx 删除了标头。

  • $http_port - 这是每个请求的随机端口。

  • $remote_port - 这是每个请求的随机端口。

可以在部署时将我的配置更改为硬编码到传入请求的已知端口,但理想情况下,我将能够更改前端端口,而无需对 nginx 配置进行任何更改。

我已经搜索了 …

reverse-proxy nginx docker x-forwarded-for nginx-reverse-proxy

23
推荐指数
3
解决办法
1万
查看次数

FastAPI (starlette) 获取客户端真实IP

我在 FastAPI 上有一个 API,当他请求我的页面时,我需要获取客户端的真实 IP 地址。

我很乐意使用starlette Request。但它返回我的服务器 IP,而不是客户端远程 IP。

我的代码:

@app.post('/my-endpoint')
async def my_endpoint(stats: Stats, request: Request):
    ip = request.client.host
    print(ip)
    return {'status': 1, 'message': 'ok'}
Run Code Online (Sandbox Code Playgroud)

我在做什么错?如何获得真实IP(如在Flask request.remote_addr 中)?

python x-forwarded-for starlette fastapi

13
推荐指数
5
解决办法
8570
查看次数

在nginx中设置“X-Forwarded-For”标头的目的是什么

我的 Django 应用程序有以下 Nginx 配置:

upstream api {
    server localhost:8000;
}

server {
    listen 80;

    location / {
        proxy_pass http://api;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /staticfiles {
        alias /app/static/;
    }
}
Run Code Online (Sandbox Code Playgroud)

我根据此处的教程进行了此配置。经过一些研究,看起来设置Host标头允许 Django API 确定原始客户端的 IP 地址(而不是代理的 IP 地址)。

标题有什么意义X-Forwarded-For?我在 nginx 日志中看到一个名为的字段$http_x_forwarded_for,但我不确定它是否相关。

django nginx x-forwarded-for

10
推荐指数
1
解决办法
4万
查看次数

使用ELB的缺点.Nginx是最好的解决方案吗?(ELB vs Nginx)

免责声明:

本主题适用于HTTP流量(在Linux平台上).对于下面的问题,可能有一个很好的解决方案与ELB(每个人的价格合理).但到目前为止我找不到任何东西.这就是我需要专家意见的原因.

问题:

我多年来一直在使用AWS Elastic Load Balancing(ELB).突然意识到ELB有一个巨大的(对我来说很关键)的缺点,即阻止IP的入站连接.

因为一旦你落后于ELB,你的服务器内部防火墙(如iptables:)就已经没用了,因为ELB的所有转发流量都标记为ELB IP(不是真正的客户端IP).ELB仅像X-Forwarded-Forhttp头一样转发真实客户端IP ,这对于无用iptables.(除非你可以建议有一个Linux防火墙iptables,它也可以处理带有XFF(X-Forwarded-For)标头的HTTP流量.)

我理解这是反向代理的正常行为,但我需要放一个防火墙!我在AWS上知道,建议使用VPC和网络ACL规则通过IP阻止入站连接.但是NACL有规则限制!(AWS仅允许NACL中最多40条规则)

想象一下,你正在运行一个高流量的公共网站,然后需要阻止每天检测到很多坏的IP.这40条规则有何帮助?

需要建议:

我开始考虑使用NginxLoad-balancer(在单独的Instance上).我以前用过Nginx,这是一个很有前途的.当然,可以取代ELB.然后:

  • 使用iptablesNginx的实例!(那么,那个VM将成为LB +防火墙)

但在我采取行动之前,

  • 有没有更好的专业建议?
  • 不使用ELB的最大区别(影响)是什么?

谢谢大家的建议.

firewall nginx amazon-elb x-forwarded-for ip-blocking

9
推荐指数
1
解决办法
6147
查看次数

apache 的两个 remoteip 指令背后的基本原理是什么?RemoteIPTrustedProxy 与 remoteipinternalproxy

RemoteIPTrustedProxy 不接受像 10.0.0.0/8 这样的内部地址。

remoteipinternalproxy 接受所有地址。

什么时候应该使用其中之一。基本原理是,据我所知,无法从Apache httpd的文档中检索。

apache directive x-forwarded-for

7
推荐指数
0
解决办法
620
查看次数

有什么方法可以强制Segment JS客户端使用IPv6而不是IPv4?

我有一台同时具有IPv4和IPv6地址的设备。在我的rails应用程序中,请求通过Cloudflare发出,并且从中提取的IP地址X-Forwarded-For是IPv6地址。但是,当我从JS客户端发送跟踪事件时,默认情况下它使用IPv4。有什么方法可以使JS客户端使用IPv6而不是IPv4?

因为这个问题。我看到来自同一设备的事件来自两个不同的IP。我尝试将IPv4转换为IPv6。但是它们是两个不同的IP(不是同一IP的两个不同表示)。

javascript analytics ipv6 x-forwarded-for segment-analytics

5
推荐指数
0
解决办法
102
查看次数

Azure API 管理 - 当 APM 落后于 WAF 时如何获取原始 IP

我们有以下技术堆栈

  • Imperva WAF
  • API 管理
  • WebApp 中的 WebApi

这是当前的实现

  • 客户端 IP 在 WAF 级别进行身份验证
  • WAF IP 在 APIM 被列入白名单
  • APIM IP 在 WebApp 级别被列入白名单

一切正常,并符合预期。

现在,当我转到 APIM -> Analytics -> 请求时,我看到这里列出了 WAF IP,而不是客户端 IP。所以在这种情况下,我们将无法跟踪谁在使用什么

我知道我们可以选择通过订阅密钥进行跟踪,但这还不够。

有人可以建议如何配置以获得正确的IP吗?

在此处输入图片说明

ip-address azure azure-api-management x-forwarded-for web-application-firewall

5
推荐指数
1
解决办法
2989
查看次数

Google Apps 脚本中提供的属性值无效

问题

\n\n
    \n
  • 我想在更改IP地址的同时与api通信,因为服务器限制IP地址。因此,我使用 UrlFetchApp 添加X-Forwarded-For标头。但是,我收到错误“提供的属性值无效:标头:X-Forwarded-For \n”
  • \n
\n\n

问题

\n\n
    \n
  • 我怎么解决这个问题?或者还有别的办法吗?
  • \n
\n\n
function myFetch() {\n\n  var url = "https://XXXXXXXXX"\n\n  var options = { method: "GET" };\n  options.headers = {\n    Authorization: "Bearer " + MY_TOKEN,\n    "X-Forwarded-For": "XXX.XXX.XXX.XXX"\n  };\n\n  var resp = UrlFetchApp.fetch(url, options);\n  var json = resp.getContentText();\n  var data = JSON.parse(json);\n\n  return data;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

尝试了 \xe2\x86\x92 错误

\n\n
    \n
  • 尝试:cURL请求。\n\xe2\x86\x92成功:我可以更改IP地址并获取数据。
  • \n
\n\n
    curl -X GET \\\n      https://XXXXXXXXX \\\n      -H \'Authorization: Bearer MY_TOKEN\' \\\n      -H \'X-Forwarded-For: …
Run Code Online (Sandbox Code Playgroud)

http google-apps-script x-forwarded-for

5
推荐指数
0
解决办法
4713
查看次数

如何将具有基本授权的 UrlFetchApp 分配给按钮?

我在 Google Apps Script 中创建了函数,当我在 Google Apps Script 中运行它时效果很好。输出数据返回到 Google 表格。

function testFunction11() {
  var rng = SpreadsheetApp.getActiveRange();
  var encodedAuthInformation = Utilities.base64Encode("username:key");
  var headers = {"Authorization" : "Basic " + encodedAuthInformation};
  var params = {
    'method': 'GET',
    'muteHttpExceptions': true,
    'headers': headers
  };
  var res = UrlFetchApp.fetch("https://api.apiservice.com/api/v1/xxx?fields=somefields", params);
  Logger.log(res.getContentText());
  rng.setValue(res);
}
Run Code Online (Sandbox Code Playgroud)

单元格中的输出:

[
  {
    "id": xxx,
    "createdDate": "2019-02-01T04:54:00Z",
    "reference": "XXX"
  },
etc
Run Code Online (Sandbox Code Playgroud)

然后我将脚本分配给按钮“testFunction11”。当我点击按钮时,它返回

{
  "message": "An error has occurred."
}
Run Code Online (Sandbox Code Playgroud)

它看起来像来自 API 服务器的响应。

我唯一的假设是 google sheet 的按钮添加了一些 headers,User-Agent 或 content-type 来请求,这在 …

get basic-authentication urlfetch google-apps-script x-forwarded-for

3
推荐指数
1
解决办法
3216
查看次数

非标准 HTTP 标头“X-Forwarded-Host”等出现在 HTTP 响应中

我们在AWS上部署了一个应用程序。在前面,AWS 负载均衡器接受所有传入的 HTTP 请求;EC2 实例直接位于该平衡器后面。在单个实例上,HAproxy 接收所有请求,然后委托给基于 Java 的真实应用程序服务器(在我们的特殊情况下,haproxy 和业务应用程序服务器位于同一个 EC2 实例上,haproxy 不扮演负载平衡角色,仅用于中继http请求,也就是说haproxy和应用服务器是一一映射的)。

当我们尝试启动对此系统的 http 调用时:

要求

GET /token HTTP/1.1
Host: xxx.xxx.xxx.xxx
Run Code Online (Sandbox Code Playgroud)

回复

HTTP/1.1 403 Forbidden 
X-Forwarded-Proto: https 
X-Forwarded-For: xxx.xxx.xxx.xxx 
X-Forwarded-Port: 443 
X-Forwarded-Host: xx.xx.xx.xxx 
Date: Wed, 09 Dec 2015 22:04:06 GMT 
Server: WSO2-PassThrough-HTTP 
Run Code Online (Sandbox Code Playgroud)

根据我的理解,X-Forwarded-*应该只出现在服务器端,以便服务器在中间有代理时识别传入请求的来源。我不知道为什么这些标题也出现在响应中。这让我担心内部 IP 会泄露给潜在的恶意客户端。

以下是haproxy设置的代码片段:

frontend worker
bind :443 ssl crt xxx crt xxx crt xx accept-proxy no-sslv3 no-tls-tickets
mode http
acl forwarded hdr_cnt(X-Forwarded-Host) gt 0
acl trusted src 127.0.0.0/24
capture request header X-Forwarded-For len 64
default_backend …
Run Code Online (Sandbox Code Playgroud)

haproxy amazon-web-services x-forwarded-for

2
推荐指数
1
解决办法
1万
查看次数

Nginx 位置阻止访问列表和“X-Forwarded-For”

我在负载平衡的 Nginx 集群上有一些 WordPress 站点。我希望阻止对这些的 /wp-admin 和 /wp-login.php 的访问。客户端不愿意使用诸如Wordfence之类的插件来实现这一点(可以理解)。

负载均衡器在 X-Forwarded-For 中转发真实的客户端 IP,这存在于 Nginx 中,因为我目前在主日志格式中使用"$http_x_forwarded_for"

这是我当前的位置块:

   location ~ ^/(wp-admin|wp-login.php) {

     real_ip_header X-Forwarded-For;

     try_files $uri $uri/ /index.php?$args;
     index index.html index.htm index.php;

     root           /var/www/vhosts/domain.com/html;
     fastcgi_pass   127.0.0.1:9000;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
     include        fastcgi_params;

     allow 1.1.1.1;
     allow 2.2.2.2;
     allow 3.3.3.3;
     #allow 10.10.85.0/24;
     deny all;
   }
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用“real_ip_header X-Forwarded-For;” 声明真实的ip应该是什么。但这是行不通的。完成上述操作后,所有发送到该处的请求都会被阻止。如果我取消注释专用10.10.85.0/24子网(这是从负载均衡器传递流量的专用网络),则向每个人授予对这些位置的访问权限。

我确实在 Nginx 中编译了 realip 模块,如下所示:

[root@STR-MAI-ORDS1 conf.d]# 2>&1 nginx -V | tr -- - '\n' | grep http_realip_module
http_realip_module
[root@STR-MAI-ORDS1 …
Run Code Online (Sandbox Code Playgroud)

php wordpress nginx x-forwarded-for

2
推荐指数
1
解决办法
6796
查看次数