- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
伙计们, 我们正在尝试为以下场景设置 Apache 反向代理: 传入请求的格式为 http://foo.com/APP/v1/main.html 对于某些服务器,URL 将引用不同的版本,例如 htt
我尝试了这个问题的答案。 How to merge multiple ProxyPass directives in Apache? 但是当我启动 apache 时出现错误,提示 ProxyPass|
我使用 Apache2.4 和 PHP-FPM 进行了简单的设置,并且尝试启用 +Indexes 选项,但收到 404“找不到文件”。当尝试访问没有索引文件的文件夹时,即使启用了自动索引。 这是我的虚
我正在内部计算机上设置 Apache 2.4.6 服务器以进行测试。 Apache 服务器应该做的事情之一是充当 localhost:3030 上找到的另一台服务器的反向代理。 localhost:3
我正在使用 apache,需要像这样代理我的请求: ProxyPass http://myserver.com/jtw/239.192.251.133:2001 Prox
在代理 php-fpm 时,FilesMatch 和 ProxyPassMatch 是否可以互换?如果可以,在任何情况下是否会使用一个替代另一个? 目前我正在按照许多在线教程通过 vhost bloc
我正在使用 mod_proxy_fcgi 和 PHP-FPM 运行 Apache,并试图让它在 Symfony 中运行。这是我使用 Symfony 的第一个项目,目前我只是在感受它...... 我的虚
我有一个 Angular 4 Web 应用程序,托管在 apache 2.4 上。该应用程序使用在 Express 上运行的、用 NodeJS Javascript 编写的 API。网站和 API 服
我正在使用构建在 Apache Web 服务器版本 2.2.4 之上的 IBM 的 IHS Webserver。 我的要求是在匹配中使用正则表达式代理传递各种上下文路径。 我尝试使用 ProxyPas
问题: 与 ProxyPassMatch 一起使用时,%0 不会被服务器名称(即 test.local)替换。 UseCanonicalName Off # %0 is replaced b
我是一名优秀的程序员,十分优秀!