使用多个 ProxyPass 配置 Apache

Posted

技术标签:

【中文标题】使用多个 ProxyPass 配置 Apache【英文标题】:Configure Apache with multiple ProxyPass 【发布时间】:2018-02-05 10:36:46 【问题描述】:

我正在尝试将我的 apache 服务器配置为代理以提供两个内部服务,一个在 8080 上侦听并应接收特定 URL 上的流量,另一个在 8077 上侦听并应接收所有其他 http 流量

我在运行这两个服务的同一台服务器上部署和配置了 apache,它正在侦听 443 以及所有 SSL 配置,并且工作正常

我还启用了 proxy_module、proxy_http_module 和 proxy_http2_module

我想要达到的目标

如果请求的 URL 是 /webhook1 --> 将其传递给 EP1 http://localhost:8080 和 任何其他请求的 URL 应传递给 EP2 http://localhost:8077

我对第一个服务的当前配置

ProxyPass /webhook1  http://localhost:8080
ProxyPassReverse /webhook1 http://localhost:8080

现在我想定义另一个代理通道类似于

ProxyPass /  http://localhost:8077
ProxyPassReverse / http://localhost:8077

将两个配置放在一起不起作用,感谢您在如何配置 apache 以满足我的要求方面的帮助

提前谢谢你

【问题讨论】:

应该可以,如果同时设置两个规则会发生什么? 当我添加第二个代理时,所有流量都转到第二个服务,所以 /webhook1 将被传递到 8077 而不是 8080 我刚刚弄清楚了影响 apache 如何执行它们的代理规则的顺序。我将根规则放在 /webhook1 规则之前,这就是为什么所有流量都流向第二个服务的原因。现在我将 webhook1 规则放在根规则之前,事情开始按预期工作。我不确定是否有更好的方法来配置服务器,但这看起来有点笨拙 【参考方案1】:

根据需要将 ProxyPass 规则按正确的顺序排列

如果您想评估 /webhook1 规则并将其发送到 8080,否则将流量发送到 8077,规则应按以下顺序进行

ProxyPass /webhook1  http://localhost:8080
ProxyPassReverse /webhook1 http://localhost:8080
ProxyPass /  http://localhost:8077
ProxyPassReverse / http://localhost:8077

【讨论】:

绝妙的答案!!我有一个类似的场景,这完美无缺 @KalyanPradhan 很高兴有帮助! Apache 中的哪个文件包含此配置?我使用 Apache 2.2 通常应该在 /conf/httpd.conf 中,即 /etc/httpd/conf/httpd.conf【参考方案2】:

您可以在 /etc/apache2/sites-enabled/ 下编写 ssl.conf 文件,如下所示:-

RewriteEngine on
ProxyPass /webhook1 http://127.0.0.1:8080/
ProxyPassReverse /webhook1 http://127.0.0.1:8080/
RewriteRule ^/$ /webhook1/ [R,L]

RewriteEngine on
ProxyPass / http://127.0.0.1:8087/
ProxyPassReverse / http://127.0.0.1:8087/
RewriteRule ^/$ /EP2/ [R,L]

如果在 apache2 中配置了 ssl 证书,它将自动重定向到 HTTPS。

【讨论】:

我正在尝试重定向到 tomcac (8080) 和 Camunda (9090)。 Tomcat 可以,camunda 不行。欢迎提出任何建议

以上是关于使用多个 ProxyPass 配置 Apache的主要内容,如果未能解决你的问题,请参考以下文章

使用Weblogic的Apache 2.2 ProxyPass - 不能使用root

nginx配置的大坑proxyPass

Apache ProxyPass 负载平衡所有 URL

如何在 Apache 中使用 SSL 配置多个子域?

ProxyPass 和 DocumentRoot 在一个域上

从虚拟主机 proxypass 中排除别名