uvicorn [fastapi] python 运行 HTTP 和 HTTPS
uvicorn [fastapi] python run both HTTP and HTTPS
我正在尝试 运行 带有 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重定向。
运行 return 从一个端口到另一个端口的重定向响应的子进程。
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')
使用HTTPSRedirectMiddleware
。这将对任何传入请求强制重定向到 https
。
from fastapi.middleware.httpsredirect import HTTPSRedirectMiddleware
app.add_middleware(HTTPSRedirectMiddleware)
我正在尝试 运行 带有 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重定向。
运行 return 从一个端口到另一个端口的重定向响应的子进程。
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')
使用HTTPSRedirectMiddleware
。这将对任何传入请求强制重定向到 https
。
from fastapi.middleware.httpsredirect import HTTPSRedirectMiddleware
app.add_middleware(HTTPSRedirectMiddleware)