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

如何让Heroku部署的Flask应用下的/blog路径指向外部WordPress?

在Heroku上为Flask应用配置/blog路径反向代理(指向外部WordPress)

可以实现,不需要子域名,通过在Flask应用中添加反向代理逻辑即可完成,以下是具体方案:

方案:Flask内置反向代理

利用Flask路由捕获/blog及子路径的请求,将其转发到外部WordPress服务器,其他路由保持原有Flask逻辑不变。

步骤1:添加依赖

在requirements.txt中添加HTTP客户端库(推荐httpx,适配同步/异步场景):

flask
gunicorn
httpx

步骤2:修改Flask应用代码

在你的Flask主文件中添加代理路由:

from flask import Flask, request, Response
import httpx

app = Flask(__name__)

# 替换为你的WordPress服务器地址(例如https://your-wordpress-site.com)
WORDPRESS_SERVER = "https://your-wordpress-server.com"

# 捕获/blog及所有子路径的请求
@app.route('/blog/<path:subpath>', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])
@app.route('/blog', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])
def proxy_wordpress(subpath=''):
    # 构建目标URL:将example.com/blog/xxx转发到WordPress服务器的/xxx
    target_url = f"{WORDPRESS_SERVER}/{subpath}" if subpath else WORDPRESS_SERVER

    # 处理请求头:移除原Host,替换为WordPress服务器的Host,避免服务识别异常
    forward_headers = {k: v for k, v in request.headers.items() if k.lower() != 'host'}
    forward_headers['Host'] = WORDPRESS_SERVER.split('//')[-1]

    # 转发请求到WordPress服务器
    with httpx.Client(follow_redirects=False) as client:
        wp_response = client.request(
            method=request.method,
            url=target_url,
            headers=forward_headers,
            content=request.get_data(),
            cookies=request.cookies
        )

    # 处理响应头:排除Flask不允许直接转发的头字段
    excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
    response_headers = [
        (name, value) for name, value in wp_response.headers.items()
        if name.lower() not in excluded_headers
    ]

    # 返回转发后的响应
    return Response(
        content=wp_response.content,
        status=wp_response.status_code,
        headers=response_headers
    )

# 原有Flask路由示例
@app.route('/')
def home():
    return "Flask应用首页"

if __name__ == '__main__':
    app.run()

关键注意事项

  • HTTP方法覆盖:必须包含所有常用HTTP方法(GET/POST/PUT等),否则WordPress的提交、登录等功能会失效
  • Host头处理:必须替换请求头中的Host为WordPress服务器的域名,否则WordPress可能返回错误跳转或404
  • 响应头过滤:排除content-length等头字段,避免Flask因响应头冲突报错
  • HTTPS兼容性:确保WordPress服务器使用HTTPS,避免浏览器混合内容警告
  • 跨域与IP限制:确认WordPress服务器未限制Heroku应用的IP访问(Heroku应用IP动态变化,若有白名单需取消限制或改用专业反向代理服务)
  • 性能优化:可添加缓存逻辑(如用cachetools),减少重复转发请求的开销

替代方案:Nginx反向代理(复杂但更高效)

如果追求更高性能,可使用Heroku的Nginx buildpack,将Nginx作为前置服务器处理反向代理,Flask应用作为后端。但配置复杂度较高,适合有Nginx配置经验的场景:

  1. 添加Nginx buildpack到Heroku应用
  2. 编写nginx.conf配置文件,将/blog路径转发到WordPress服务器,其余路径转发到gunicorn

部署测试

本地测试通过后,提交代码到Heroku,验证example.com/blog是否正常加载WordPress内容,同时确认其他Flask路由功能不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:45:39