You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI TrustedHostMiddleware拒绝客户端IP访问问题求助

问题描述

本地开发阶段,把127.0.0.1设为可信主机后,能正常访问/docs路由。但部署到服务器后,用自己电脑的IP访问/docs时被拒绝。已经通过多个网站和request.client.host确认过IP信息,还是没法访问该路由,只有设置trusted_hosts = ["*"]时才能正常访问,但这种配置明显不安全。

现有代码

from fastapi import FastAPI
from fastapi.middleware.trustedhost import TrustedHostMiddleware

app = FastAPI()

# 定义可信主机列表
trusted_hosts = [
    "my_ip_address"
]

# 给应用添加TrustedHostMiddleware中间件
app.add_middleware(TrustedHostMiddleware, allowed_hosts=trusted_hosts)
解决方案
  • 先搞清楚TrustedHostMiddleware的作用:这个中间件校验的是请求头里的Host字段,不是发起请求的客户端IP。你之前把自己电脑的IP填进去完全搞错了,它管的是用户访问时用的域名/服务器主机名,不是你的电脑IP。
  • 正确配置allowed_hosts:
    • 如果直接用服务器公网IP访问,就把服务器的公网IP加到列表里,比如["123.45.67.89"]
    • 如果用域名访问,就填对应的域名,比如["example.com", "www.example.com"]
    • 要是服务器前面有Nginx这类反向代理,得确保代理把原始Host头传递给FastAPI,同时可以配合TrustMiddleware信任代理IP,再把实际的访问域名/服务器IP加进allowed_hosts
  • 排查实际的Host头:可以在服务器上临时加个测试接口,确认请求实际带的Host值是什么:
from fastapi import Request

@app.get("/check-host")
async def check_host(request: Request):
    return {"host": request.headers.get("Host")}

访问这个接口拿到返回的host值,把它加到trusted_hosts列表里就能解决问题。

内容的提问来源于stack exchange,提问作者Testing man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 01:29:57