使用 Apache 将端点转发到同一主机上的不同端口

问题描述 投票:0回答:1

我正在尝试将 Apache 配置为以不同的方式处理应用程序的某些端点。

我需要

/api
/appname
/admin
转发到同一主机上的单独 Tomcat 实例,显然在不同的端口上运行。

Apache 正在侦听 443 (SSL)。

查看 Apache 的文档,我看到一些示例,其中

mod_rewrite
用于类似的任务,但不适用于此实际用例。

只有端口 80 和 443(80 重定向到 443)对外部开放,因此其他端口仅对内部开放......我们将它们称为 2001、3001 和 4001。

编辑:附录:我正在使用 apache 2.2,目前不打算更新到 2.4.x。

apache tomcat mod-rewrite reverse-proxy mod-proxy
1个回答
7
投票

首先,您需要确保启用

mod_proxy
。然后,假设您希望每个
/api/
/appname/
/admin/
对于最终用户来说看起来像一个子目录,并且他们分别在
2001
3001
4001
上监听,我认为你正在寻找的是这样的:

(在服务器或虚拟主机配置中)

RewriteRule ^/api/(.*)     http://localhost:2001/$1 [P,L,QSA]
ProxyPassReverse /api/     http://localhost:2001/

RewriteRule ^/appname/(.*) http://localhost:3001/$1 [P,L,QSA]
ProxyPassReverse /appname/ http://localhost:3001/

RewriteRule ^/admin/(.*)   http://localhost:4001/$1 [P,L,QSA]
ProxyPassReverse /admin/   http://localhost:4001/

(在 .htaccess 配置中...没有前导斜杠...并且没有

mod_proxy

RewriteRule ^api/(.*)      http://localhost:2001/otherpath/$1 [P,L,QSA]
RewriteRule ^appname/(.*)  http://localhost:3001/otherpath/$1 [P,L,QSA]
RewriteRule ^admin/(.*)    http://localhost:4001/otherpath/$1 [P,L,QSA]

$1
代表括号捕获的内容。
P
告诉 mod_rewrite 使用 mod_proxy 来处理这次重写。
L
表示将此作为最后一条规则;应用此后停止重写。
QSA
将入站请求中的查询字符串附加到重写的请求上。

ProxyPassReverse
用于捕获来自内部实例的任何重定向并重写它以匹配外部 URI。注意:
mod_proxy
需要位于服务器配置(服务器、虚拟主机、目录)中,并且在 .htaccess
无效

一些有用的参考:

现在,尽管如此,您可能无论如何都不想使用

mod_rewrite
来执行此操作。确实是
mod_proxy
正在为您完成所有工作。如果你没有任何实际的重写,你应该直接使用
mod_proxy
。即使
mod_rewrite
也只是将其交给
mod_proxy

来自 http://httpd.apache.org/docs/2.2/rewrite/avoid.html

RewriteRule
提供
[P]
标志来传递重写的 URI
mod_proxy

RewriteRule ^/?images(.*) http://imageserver.local/images$1 [P]

但是,在很多情况下,当没有实际的模式匹配时 需要,如上面的示例所示,

ProxyPass
指令是一个 更好的选择。这里的例子可以呈现为:

ProxyPass /images/ http://imageserver.local/images/ 

请注意,无论您使用

RewriteRule
还是
ProxyPass
,您仍然会 需要使用
ProxyPassReverse
指令来捕获重定向 从后端服务器发出:

ProxyPassReverse /images/ http://imageserver.local/images/ 

当有其他规则时,您可能需要使用 RewriteRule 来代替 RewriteRules 在相同范围内有效,因为 RewriteRule 将 通常在 ProxyPass 之前生效,因此可能会抢先 你正在努力实现目标。

© www.soinside.com 2019 - 2024. All rights reserved.