使用 Python FastAPI。运行 apache 的 Web 服务器如何通过 HTTPS 服务静态文件夹

问题描述 投票:0回答:1

使用 FastAPI 时,我的静态文件夹中的所有文件都通过 HTTP 而不是 HTTPS 提供。更清楚地说,它们不是在我的域上被切断,而是在我的网络服务器的本地主机上被切断。我假设这是我的网络服务器设置方式和 FastAPI 的挂载功能之间的某种东西。

我使用 Apache 托管,具有域、静态 IP 和 https 证书。同一台服务器上的 Flask 或 NodeJS 没有问题。

from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates

app = FastAPI()

templates = Jinja2Templates(directory="templates/")

app.mount("/static", StaticFiles(directory="static"), name="static")

@app.get("/home/", response_class=HTMLResponse)
async def home(request: Request):
   return templates.TemplateResponse("home.html", {"request": request})

错误:

Mixed Content:  
The page at 'https://www.<insert-domain>.com' was loaded over HTTPS,   
but requested an insecure element 'http://localhost:3000/static/logo.png'.  
This request was automatically upgraded to HTTPS,  
For more information see  

https://blog.chromium.org/2019/10/no-more-mixed-messages-about-https.html

python apache fastapi
1个回答
0
投票

TL;博士

尝试在您的应用程序中包含所需的

ssl
配置,
这样
FastAPI
就会知道如何通过
HTTPS
服务服务器。
请尝试以下操作:

app = FastAPI(
    ssl_keyfile="/path/to/your/private.key",
    ssl_certfile="/path/to/your/certificate.crt"
)

出现此错误的原因

您会遇到上述关于在您的网站中混合安全和不安全元素的错误。看起来你访问你的域它有所需的

SSL
证书,但是当你访问存储在本地的静态文件时,你正在从
localhsot
获取东西而不知道它们存在。
FastAPI
您配置它的方式不知道如何通过
HTTPS
提供这些文件。因此,您会遇到同时访问
https://www.example.com
http://localhost
的确切问题,chrome 不再支持该问题。

解决问题

为了创建

FastAPI
应用程序并以安全的方式配置它,您需要在应用程序的配置中提及
ssl
密钥和证书。这样,当您访问该站点时,您将拥有
HTTPS
。将所需的
ssl_keyfile
ssl_certfile
作为参数添加到
FastAPI
构造函数应该可以解决问题。 (请看上面的代码片段)

HTTPS 比这更复杂

我强烈建议您花时间深入研究该主题并FastAPI

文档站点阅读更多关于该主题
的信息。正如那里提到的:

很容易假设 HTTPS 只是“启用”或未启用。
但它比那复杂得多。

投产前需要注意的事项

部署站点时应考虑多种因素。
根据您对错误的描述,可能是配置不正确。
出于某种原因,服务器访问

localhost
以获取站点/应用程序的徽标。当您在开发区域时这可能会起作用,但是当您进入生产环境时可能会出现问题。我希望服务器从服务器(使用域)获取所有静态文件,而无需尝试访问一些本地内容。确保服务器配置正确。

进一步阅读

如果您正在寻找有关手动运行服务器的配置的更多示例,您可以在以下博客文章中阅读更多相关信息:

如果您有兴趣检查有关部署设置的最佳实践,

FastAPI
文档站点将是一个好的开始 - 涵盖基础知识并提供一些基本规则:

© www.soinside.com 2019 - 2024. All rights reserved.