【问题标题】:Edit path but keep the url with http-proxy-middleware编辑路径但使用 http-proxy-middleware 保留 url
【发布时间】:2022-12-16 13:11:11
【问题描述】:

我正在尝试以特定方式重写路径,但得不到我想要的结果,而且似乎无法弄清楚我做错了什么。

我有以下设置: 我有 apps.eugene-dev.com 指向我的服务器。 在我的服务器上,我有几个应用程序在不同的端口上运行,我想代理它们。例如我有 airflow 网络服务器在端口 8080 上运行

我想要这样的东西:
apps.eugene-dev.com/airflow ~> apps.eugene-dev.com:8080/
apps.eugene-dev.com/airflow/some_path ~> apps.eugene-dev.com:8080/some_path

但我希望浏览器中的网址保持原样。所以在上面的例子中,我会得到apps.eugene-dev.com:8080/some_path的回复,但是,我仍然会看到apps.eugene-dev.com/airflow/some_path

在尝试了几件事但无法实现之后,我开始质疑我想要的是否有可能。如果不是,那么我将不得不为每个应用程序切换到一个单独的子域。

我试过的:

这行得通,但这限制了我每个子域只能使用一个应用程序

const airflow_target = `apps.eugene-dev.com:8080`

const airflow_proxy_options = {
    target: 'http://apps.eugene-dev.com:8080',
    logLevel: 'debug',

}


app.use('/', createProxyMiddleware(airflow_proxy_options));

这从路径中删除了 /airflow,但也使整个 URL 成为目标 url

const airflow_target = `apps.eugene-dev.com:8080`

const airflow_proxy_options = {
    target: 'http://apps.eugene-dev.com:8080',
    changeOrigin: true,
    pathRewrite: {
        '^/airflow/': '',
        '^/airflow': '', // remove base path
    },

    logLevel: 'debug',

}


app.use('/airflow', createProxyMiddleware(airflow_proxy_options));

这会保留我想要的 URL,但也不会删除 /airflow,从而使请求错误(即 ...:8080/airflow/login 而不是 ...:8080/login

const airflow_target = `apps.eugene-dev.com:8080`

const airflow_proxy_options = {
    target: 'http://apps.eugene-dev.com:8080',
    changeOrigin: true,
    logLevel: 'debug',

}


app.use('/airflow', createProxyMiddleware(airflow_proxy_options));

我是不是想要太多而这不是它的工作原理,或者有什么方法可以结合这些效果?正如我之前所说,我并不严格需要它来工作,我有其他方法来完成我的最终任务,但这让我非常沮丧,我认为它应该工作但没有。所以希望能学到新东西。

先感谢您!

【问题讨论】:

    标签: typescript express reverse-proxy http-proxy-middleware


    【解决方案1】:

    遇到同样的问题,有人有解决方法吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 2017-03-05
      • 2017-12-08
      相关资源
      最近更新 更多