社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

uvicorn[fastapi]python同时运行HTTP和HTTPS

Zabir Al Nazi • 3 年前 • 1591 次点击  

我正在尝试使用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重定向?

注意:这是一个服务器上的设置,我不想使用nginx,我知道如何使用nginx实现https重定向。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132174
 
1591 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Chris
Reply   •   1 楼
Chris    3 年前

使用 HTTPSRedirectMiddleware 。这将强制重定向到 https 在收到任何请求时。

from fastapi.middleware.httpsredirect import HTTPSRedirectMiddleware
app.add_middleware(HTTPSRedirectMiddleware)
Aaron
Reply   •   2 楼
Aaron    3 年前

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

主要的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_重定向。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')