28 lines
1.0 KiB
Python
28 lines
1.0 KiB
Python
from fastapi import Request
|
|
|
|
|
|
# 🔽 사용자 IP 확인
|
|
def get_client_ip(request: Request) -> str:
|
|
xff = request.headers.get("X-Forwarded-For")
|
|
if xff:
|
|
return xff.split(",")[0].strip() # 첫 번째 값(실제 클라이언트 IP)
|
|
xri = request.headers.get("X-Real-IP")
|
|
if xri:
|
|
return xri # Nginx가 전달한 원래 클라이언트 IP
|
|
return request.client.host # 마지막 fallback (프록시/NAT IP)
|
|
|
|
|
|
# 🔽 요청 SWAGGER 포트 확인
|
|
def get_swagger_port(request: Request) -> str:
|
|
# 우선순위: X-Forwarded-Port → request.url.port → Host 헤더 → 기본 포트 추정
|
|
port = request.headers.get("X-Forwarded-Port")
|
|
if port:
|
|
return port
|
|
if request.url.port:
|
|
return str(request.url.port)
|
|
host_header = request.headers.get("host")
|
|
if host_header and ":" in host_header:
|
|
return host_header.split(":")[1]
|
|
# 마지막으로 기본 포트(HTTPS 443, HTTP 80) 추정
|
|
return "443" if request.headers.get("X-Forwarded-Proto") == "https" else "80"
|