docker - Flask 重定向命令间歇性地重定向到 http 而不是 https 链接
问题描述
我正在使用在 Traefik 后面的 apache2 docker 容器上运行的烧瓶。该应用程序是一个简单的留言簿应用程序。它具有一项功能,可让您对条目进行投票,从而获得积分。此链接只是更新数据库,然后将它们返回到主页。由于某种原因,它会间歇性地尝试重定向到主页的 http 链接而不是 https 链接。这是由 Traefik 处理的,它重定向回 https 链接。但是,我想弄清楚为什么会这样。
到目前为止,我已经尝试在主页上添加一个“检查”链接并单击它以消除投票代码作为问题,它所做的只是重定向回主页,问题仍然间歇性地发生。有趣的是,有时我实际上使用此链接获得了 200 状态,我认为这不应该发生在重定向上。
这是设置的样子:
初始化.py
@app.route('/', methods = ['GET','POST'])
def homepage():
form = GuestbookForm(request.form)
if "ID" not in session:
session["ID"] = genuserid();
if request.method == 'POST' and form.validate():
name = form.name.data
message = form.message.data
setData( {"name":name, "message":message} )
d = getData()
if d[0] == 0:
return render_template("guestbook.html", form=form, d=d[1])
else:
return str(d[1])
@app.route('/check/')
def check():
return redirect(url_for("homepage"))
用于 traefik 的 docker-compose.yml 的相关部分
traefik:
image: "traefik:v2.1"
container_name: "traefik"
command:
#- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
#Setups auto ssl with letsencrypt using http challenge.
- "--certificatesresolvers.myresolver.acme.httpchallenge=true"
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
#- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.myresolver.acme.email=jcusitar@gmail.com"
#Stores the certs in a json file that persists.
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
- "--serverstransport.insecureskipverify=true"
ports:
- "80:80"
- "443:443"
- "8080:8080"
guestbook:
image: guestbook:dev
labels:
# Enable container for traefik routing
- "traefik.enable=true"
- "traefik.http.middlewares.guestbook-redirect-web-secure.redirectscheme.scheme=https"
- "traefik.http.routers.guestbook-web.middlewares=guestbook-redirect-web-secure"
- "traefik.http.routers.guestbook-web.rule=Host(`domain`)"
- "traefik.http.routers.guestbook-web.entrypoints=web"
- "traefik.http.routers.guestbook-web-secure.rule=Host(`domain`)"
- "traefik.http.routers.guestbook-web-secure.entrypoints=websecure"
- "traefik.http.routers.guestbook-web-secure.tls.certresolver=myresolver"
- "traefik.http.services.guestbook.loadbalancer.server.port=443"
volumes:
- "./guestbookwww:/var/www/"
networks:
- stack
请让我知道您认为可能会发生什么。如果需要其他信息,我可以添加。
编辑:
我发现这似乎与重定向功能有关。我重定向到整个网址(即:https://sub.domain.ca)并且效果很好。重定向到“/”会产生这种行为。
解决方案
推荐阅读
- python - 如何使用 GridSizer 在 WxPython 中调整小部件的大小
- javascript - 为网格中的多个视频复制视频缩略图
- entity-framework - DbContext 无法保存多个条目
- ansible - 带有 ansible 的 sshfs 与在主机上手动运行它的结果不同
- scala - spark-shell scale 过滤时间戳列,取汇率平均值并汇总日期
- r - R:指定一个对比的 text_geom 调色板来搭配 scale_fill_manual 调色板?
- python - 从 fastapi 返回 numpy 数组作为图像
- python - 使用正则表达式根据python文件中的第一个字符获取索引
- qml - 如何在 QML 中绘制单边线边框
- c# - C# 9 错误?CallerMemberName 在类型省略的构造函数调用中不起作用