【发布时间】: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