我在 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'}
我做错了什么?如何获得真实 IP(如 Flask 中的 request.remote_addr)?
原文由 Nataly Firstova 发布,翻译遵循 CC BY-SA 4.0 许可协议
request.client
应该可以工作,除非你在代理(例如nginx)后面运行,在这种情况下使用uvicorn 的--proxy-headers
标志来接受这些传入的标头并确保代理转发它们。