fastapi获取到客户端的真实 IP 地址,使用nginx负载之后无法获取客户端真实IP?

== 项目部署使用nginx配置转发后,会导致获取服务器本身ip、客户端ip都会有异常 ==

在FastAPI中,你可以通过请求的Remote IP地址来获取客户端的实际IP地址。但是,如果你的应用程序部署在负载均衡器后面,你可能会得到负载均衡器的IP地址。在这种情况下,你需要配置你的负载均衡器以转发原始的IP地址。

以下是一些常见的解决方案:

解决方案1:如果你使用的是Nginx作为负载均衡器,你可以在Nginx配置中添加以下设置:

location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://backend;
}

然后在FastAPI中,你可以使用以下代码获取真实IP:

from fastapi import FastAPI, Request
 
app = FastAPI()
 
@app.get("/")
async def main(request: Request):
    return {"Client IP": request.headers.getlist("X-Forwarded-For")[0]}

解决方案2:如果你使用的是AWS的ALB(Application Load Balancer),你可以在ALB的配置中设置以下属性:

在"Listeners"标签页中,选择你的监听器,然后在"Advanced settings"中,勾选"Propagate client IP"。

然后在FastAPI中,你可以使用以下代码获取真实IP:

from fastapi import FastAPI, Request
 
app = FastAPI()
 
@app.get("/")
async def main(request: Request):
    return {"Client IP": request.client.host}

解决方案3:如果你使用的是HAProxy作为负载均衡器,你可以在HAProxy的配置中添加以下设置:

frontend main *:5000
option forwardfor
然后在FastAPI中,你可以使用以下代码获取真实IP:

from fastapi import FastAPI, Request
 
app = FastAPI()
 
@app.get("/")
async def main(request: Request):
    return {"Client IP": request.headers.get("X-Forwarded-For").split(",")[0]}

注意:在所有这些情况下,你都需要确保你的负载均衡器正确地转发了原始的客户端IP地址。如果你的应用程序部署在多层负载均衡器后面,你可能需要检查所有层级的负载均衡器是否都正确配置了客户端IP地址的转发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值