FastAPI jinja2 url_for https 지원

Seungjun Lee·2023년 2월 28일
0

FastAPI app을 도커를 사용 하여 nginx에 연결 할 때
url_for 사용시 https가 적용 되지 않을 경우

nginx site.conf

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

템플릿 선언부

try:
    import jinja2

    if hasattr(jinja2, "pass_context"):
        pass_context = jinja2.pass_context
    else:  # pragma: nocover
        pass_context = jinja2.contextfunction  # type: ignore[attr-defined]
except ImportError:  # pragma: nocover
    jinja2 = None  # type: ignore

@pass_context  # noqa
def url_for(context: dict, name: str, **path_params: typing.Any) -> str:
    request = context["request"]
    http_url = request.url_for(name, **path_params)
    if request.url.scheme == 'https' or "x-forwarded-for" in request.headers.keys():
        return http_url.replace("http", "https", 1)
    else:
        return http_url


templates = Jinja2Templates(directory="templates")
templates.env.globals["url_for"] = url_for
profile
개발자?

0개의 댓글