You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Heroku上使用Gunicorn无法将HTTP转发至HTTPS的问题

在Heroku上为Dash应用强制HTTPS重定向的解决方案

你的gunicorn配置仅用于让应用识别Heroku路由器转发的HTTPS请求标识,本身不会主动触发HTTP到HTTPS的重定向。要实现强制跳转,需要在Dash底层的Flask框架中添加请求拦截逻辑,结合Heroku的请求头判断处理。

方法一:添加Flask请求钩子实现重定向

Dash基于Flask开发,可通过before_request钩子在每个请求到达前检查协议,若为HTTP则重定向到HTTPS:

from dash import Dash, html
from flask import redirect, request

# 初始化Dash应用
app = Dash(__name__)

# 强制HTTPS重定向逻辑
@app.server.before_request
def enforce_https():
    # 仅在生产环境(Heroku)生效,避免影响本地开发
    if request.headers.get('X-Forwarded-Proto', 'http') != 'https':
        # 替换协议为HTTPS并返回永久重定向
        secure_url = request.url.replace('http://', 'https://', 1)
        return redirect(secure_url, code=301)

# 你的Dash应用布局
app.layout = html.Div([
    html.H1("HTTPS Only Dashboard")
])

# 启动应用(生产环境由gunicorn接管,此处仅用于本地调试)
if __name__ == '__main__':
    app.run_server(debug=True)

方法二:确保gunicorn配置正确加载

若怀疑配置文件未被正确读取,可直接在Procfile中指定参数,规避路径问题:

web: gunicorn --forwarded-allow-ips='*' --secure-scheme-headers='{"X-FORWARDED-PROTO": "https"}' app:server

该配置让gunicorn信任Heroku转发的HTTPS标识,配合上述Flask重定向逻辑即可完成强制跳转。

关键说明

Heroku请求先经过其路由器再转发到应用,应用无法直接获取原始请求协议,必须通过X-Forwarded-Proto请求头判断用户实际使用的协议。gunicorn配置是让应用信任这个头,而重定向逻辑需要在应用层面主动实现。

内容的提问来源于stack exchange,提问作者benbyford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:07:17