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

使用http-proxy-middleware代理Flower时Datatables Ajax请求404求助

Flower反向代理Ajax 404问题排查求助

编辑补充

我已通过如下https_server.js配置修复了下文提到的CSS报错问题:

function flowerGetMethods(app, endpoint, certified) {
    if (certified) {
      var options = {
          logLevel: 'debug',
          target: 'http://'+"flower:5555", // target host
          changeOrigin: true, // needed for virtual hosted sites
          ws: true,
          port: 5555,
          pathRewrite: {},
      };
      var flowerProxy = createProxyMiddleware(options);
    }

同时修改了docker-compose.yaml配置:

flower:
    container_name: flower
    image: mher/flower
    hostname: "flower"
    command: ["celery", "flower", "--url_prefix=flower"]
    ports:
      - 5555
    expose:
      - 5555

但我仍然遇到如下问题:
访问localhost/flower/tasks时会弹出提示:
DataTables warning: table id=tasks-table - Ajax error. For more information about this error, please see http://datatables.net/tn/7
经排查该报错是因为POST请求http://localhost/flower/tasks/datatable时返回404,我不清楚该资源找不到的原因,恳请大家提供帮助!

原始提问

我想使用http-proxy-middleware代理Flower服务,但出现了CSS无法加载、页面链接无法正常跳转的问题,页面显示效果如下:
访问localhost/flower时打开的网页
同时收到如下报错:

Error http://localhost/static/css/flower.css?v=83ad...[not found]

点击页面链接会直接导致页面报错,比如点击「Dashboard」时会跳转至http://localhost/dashboard并提示找不到资源。
我预期的效果是点击链接后跳转至http://localhost/flower/dashboard,CSS等静态资源请求路径为http://localhost/flower/static/css/flower.css?...。以下是所有相关代码,Flower实例和Web服务都运行在Docker容器中。

HTTP服务代码如下:

var async = require('async');
const express = require('express')
var app = express()
const port = 80

var helmet = require('helmet');

const { createProxyMiddleware } = require('http-proxy-middleware');
/* redirect to flower */
function flowerGetMethods(app, endpoint, certified) {
    if (certified) {
      var options = {
          logLevel: 'debug',
          target: 'http://'+"flower:5555", // target host
          changeOrigin: true, // needed for virtual hosted sites
          ws: true,
          pathRewrite: {},
          port: 5555,
      };
      options.pathRewrite['^'+endpoint+'/flower'] = ''; // remove path
      var flowerProxy = createProxyMiddleware(options);
    }

    app.get(endpoint+'/flower*', function(req, res, next) {
      flowerProxy(req, res, next);
    });
}

async.waterfall([
  function(next) {
    app.use(
       helmet({
         contentSecurityPolicy: false,
         noSniff: false,
       })
     );
    var protocol = require('http').createServer(app);

    protocol.listen(port, () => {
      console.log(`Example app listening at http://localhost:${port}`)
      });

      app.get('/', (req, res) => {
        res.send('Hello World!')
      });
      flowerGetMethods(app, '', true);
    }
]);

该服务的Dockerfile如下:

FROM node:10.24-alpine

# Install openssl
RUN apk add --update openssl ca-certificates

# Create app directory
RUN mkdir -p /node-servers

# Setting the working directory
WORKDIR /node-servers

# Install app dependencies
COPY package.json /node-servers/
RUN npm install
# if building for production
#RUN npm ci --only=production

# Copy everything
COPY ./ /node-servers

# Entrypoint used to load the environment and start the node server
ENTRYPOINT [ "node", "https_server.js" ]

我使用如下docker-compose配置启动服务和Flower容器:

version: '3'
services:
  https-server:
    container_name: https-server
    build: ./node-servers
    ports:
      - 80:80
    expose:
      - "80"
    depends_on:
      - flower

  flower:
    container_name: flower
    image: mher/flower 
    ports:
      - 5555

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:36:03