【问题标题】:uvicorn [fastapi] python run both HTTP and HTTPSuvicorn [fastapi] python 同时运行 HTTP 和 HTTPS
【发布时间】:2021-11-07 07:42:27
【问题描述】:

我正在尝试使用 SSL 运行 fastapi 应用程序。

我正在使用 uvicorn 运行应用程序。

我可以使用 HTTP 在端口 80 上运行服务器,

if __name__ == '__main__':
    uvicorn.run("main:app", port=80, host='0.0.0.0', reload = True, reload_dirs = ["html_files"])

要使用 HTTPS 运行端口,我执行以下操作,

if __name__ == '__main__':
    uvicorn.run("main:app", port=443, host='0.0.0.0', reload = True, reload_dirs = ["html_files"], ssl_keyfile="/etc/letsencrypt/live/my_domain/privkey.pem", ssl_certfile="/etc/letsencrypt/live/my_domain/fullchain.pem")

如何同时运行或简单地集成 https 重定向?

N.B:这是我不想使用 nginx 的服务器上的设置,我知道如何使用 nginx 来实现 https 重定向。

【问题讨论】:

    标签: python-3.x ssl fastapi uvicorn https-redirect


    【解决方案1】:

    运行一个子进程以将重定向响应从一个端口返回到另一个端口。

    main.py:

    if __name__ == '__main__':
        Popen(['python', '-m', 'https_redirect'])  # Add this
        uvicorn.run(
            'main:app', port=443, host='0.0.0.0',
            reload=True, reload_dirs=['html_files'],
            ssl_keyfile='/etc/letsencrypt/live/my_domain/privkey.pem',
            ssl_certfile='/etc/letsencrypt/live/my_domain/fullchain.pem')
    

    https_redirect.py:

    import uvicorn
    from fastapi import FastAPI
    from starlette.requests import Request
    from starlette.responses import RedirectResponse
    
    app = FastAPI()
    
    
    @app.route('/{_:path}')
    async def https_redirect(request: Request):
        return RedirectResponse(request.url.replace(scheme='https'))
    
    if __name__ == '__main__':
        uvicorn.run('https_redirect:app', port=80, host='0.0.0.0')
    

    【讨论】:

      猜你喜欢
      • 2022-12-19
      • 2022-12-21
      • 2021-04-02
      • 1970-01-01
      • 2021-08-31
      • 2020-11-07
      • 2021-07-30
      • 2018-11-30
      • 1970-01-01
      相关资源
      最近更新 更多