我有一个 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"
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做,是使用 ProxyPassMatch 指令并创建一个正则表达式,以便将包含 /api/ 的任何 url 重定向到http://localhost:9000/api/ .....
我尝试了以下但它不起作用:
ProxyPassMatch "^/api.*$" "http://localhost:9000/$1"
ProxyPassReverse "^/api.*$" "http://localhost:9000/$1"
Run Code Online (Sandbox Code Playgroud)
以下情况也没有:
ProxyPassMatch "^/.*?/api.*?/v[0-9]+/(.*)$" "http://localhost:9000/$1"
ProxyPassReverse "^/.*?/api.*?/v[0-9]+/(.*)$" "http://localhost:9000/$1"
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。我的正则表达式技能缺乏!
注意:显然 'localhost' 可以是 IP 地址或域,为了简单起见,我在示例中使用它。
非常感谢!
编辑:根据亚历克斯的评论,我更正了第一个示例以使用 .* 而不是 * 。
Dre*_*ord 11
我解决了这个问题。在上述示例中使用 apache 进行反向代理的正确方法如下:
ProxyPassMatch "/api(.*)" "http://localhost:9000/api$1"
ProxyPassReverse "/api(.*)" "http://localhost:9000/api$1"
Run Code Online (Sandbox Code Playgroud)
我知道我尝试的多个正则表达式示例是正确的,因为我正在使用https://regex101.com/测试它们,但是我将第二部分硬编码到特定路线以消除第二部分的问题不正确,但由于某种原因它不喜欢那样。一旦我了解到正则表达式的 (.*) 部分是第一个捕获组,并将其用作第二部分中的 $1,一切都奏效了。
我希望我足够澄清答案,并且对其他人有用。
| 归档时间: |
|
| 查看次数: |
14490 次 |
| 最近记录: |