gpt4 book ai didi

regex - 如何为 apache ProxyPassMatch 编写正则表达式来反向代理 API 调用

转载 作者:行者123 更新时间:2023-12-01 23:18:20 26 4
gpt4 key购买 nike

我有一个 Angular 4 Web 应用程序,托管在 apache 2.4 上。该应用程序使用在 Express 上运行的、用 NodeJS Javascript 编写的 API。网站和 API 服务都运行在同一台机器上,但运行在不同的端口上。该网站位于端口 80 上,API 服务正在监听端口 9000。

我想设置 apache 来为所有 API 调用进行反向代理。

例如,任何包含/api/的url我希望它被apache重写以指向API url:port。如果我像下面这样使用 ProxyPass,则重定向工作正常:

ProxyPass        "/api/V1/systeminfo" "http://localhost:9000/api/V1/systeminfo"
ProxyPassReverse "/api/V1/systeminfo" "http://localhost:9000/api/V1/systeminfo"

我不知道该怎么做,就是使用 ProxyPassMatch 指令并创建一个正则表达式,以便任何包含/api/的 url 都重定向到 http://localhost:9000/api/ ......

我尝试了以下方法,但不起作用:

ProxyPassMatch    "^/api.*$" "http://localhost:9000/$1"
ProxyPassReverse "^/api.*$" "http://localhost:9000/$1"

以下情况也不会:

ProxyPassMatch    "^/.*?/api.*?/v[0-9]+/(.*)$" "http://localhost:9000/$1"
ProxyPassReverse "^/.*?/api.*?/v[0-9]+/(.*)$" "http://localhost:9000/$1"

如有任何帮助,我们将不胜感激。我缺乏正则表达式技能!

注意:显然“localhost”可以是 IP 地址或域,为了简单起见,我在示例中使用它。

非常感谢!

编辑:我根据 Alex 的评论更正了第一个示例,使用 .* 而不是仅使用 *。

最佳答案

我解决了这个问题。在上面的例子中使用apache进行反向代理的正确方法如下:

ProxyPassMatch    "/api(.*)" "http://localhost:9000/api$1"
ProxyPassReverse "/api(.*)" "http://localhost:9000/api$1"

我知道我尝试的多个正则表达式示例是正确的,因为我正在使用 https://regex101.com/ 测试它们。 ,但我将第二部分硬编码到特定路线,以消除第二部分不正确的问题,但由于某种原因它不喜欢那样。一旦我明白正则表达式的 (.*) 部分是第一个捕获组并将其用作第二部分中的 $1,一切就都有效了。

我希望我已经足够澄清了答案,并且对其他人有用。

关于regex - 如何为 apache ProxyPassMatch 编写正则表达式来反向代理 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46116213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com