我目前面临 AWS Elastic Beanstalk 设置的问题,其中前端和后端应用程序分别部署在 Elastic Beanstalk 上。前端是用 React 构建的,后端是 FastAPI 应用程序。两个负载均衡器都配置为处理 HTTPS 流量,并且我设置了监听器规则,将 HTTP(端口 80)重定向到 HTTPS(端口 443)。
但是,在向后端发出请求时,我观察到 307 临时重定向到 HTTP URL。
关键细节:
我已经彻底审查了 FastAPI 路由处理程序、中间件和反向代理设置。尽管如此,我无法确定为什么会发生 307 重定向到 HTTP。前端 React 应用程序向后端发起请求,我怀疑前端和负载均衡器之间可能存在交互导致此行为。
考虑到前端和后端单独的 Elastic Beanstalk 部署,有人可以提供有关解决此问题的指导吗?是否有需要在前端和后端检查的特定日志或配置?或者如果我必须在我的 FastAPI 应用程序中查看任何会导致出现 307 错误的内容?
下面是我的 /auth/token 的 FastApi 代码片段:
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"]
)
app.include_router(auth_router, prefix="/auth", tags=["Authentication"])
@router.post("/token", response_model=dict)
async def login(user: User):
return login_user(user)
def login_user(user: User):
attributes = user_table.scan(AttributesToGet=["userId", "email", "password_hash"])
users = attributes['Items']
user_exists = any(item.get('email') == user.email for item in users)
if not user_exists:
raise HTTPException(status_code=400, detail="User not found")
selected_user = [item for item in users if (item.get('email') == user.email)][0]
is_verified = verify_password(user.password.get_secret_value(), selected_user.get('password_hash'))
if is_verified:
user = selected_user
user.pop("password_hash")
token_data = {"sub": user.get("email")}
token = encode(token_data, HASH_SECRET, ALGORITHM)
save_audit_trail(user_id=user.get('userId'), action_type="login", description="Logged In to system")
return {"access_token": token, "token_type": "bearer", "user": user}
raise HTTPException(status_code=400, detail="Invalid Login Credentials.")
任何见解或帮助将不胜感激!
假设您已检查 ELB 配置是否有任何错误,您是否检查过应用程序代码中是否存在可能触发 307 重定向的逻辑?这可能是故意的,也可能是由于代码中的配置错误或错误处理造成的。