Apache 将请求转发到另一台服务器

Posted

技术标签:

【中文标题】Apache 将请求转发到另一台服务器【英文标题】:Apache forwarding request to another server 【发布时间】:2012-04-23 10:57:21 【问题描述】:

我希望 apache 将来自一台服务器的请求转发到另一台服务器。这是完整的场景:

有 3 台服务器:

    机器 A - IP:A.A.A.A - 想要在机器 C 上调用 API 的客户端机器。 机器 B - IP:B.B.B.B - 中间机器 机器 C - IP:C.C.C.C - 托管 API 的机器。

API URL:http:// 机器 c:8000/v1/customer/....

连接状态:

    机器 A -> 机器 B:端口 80 上的 Telnet - 好 机器 B -> 机器 C:端口 8000 上的 Telnet - 好 机器 A -> 机器 C:端口 8000 上的 Telnet - 错误

理想情况下,我想从机器 A 调用机器 C 上的 API,但由于我在 A 和 C 之间没有直接的 n/w 连接,所以我必须走这条路线。

所以我想在机器 B 上设置 apache 服务器,这样: 从机器 A 进行 API 调用 - http:// Machine B:80/v1/customer/.... 然后将其转发到端口 8000 上的 Machine C。 C 处理请求并将响应发送回 A。

任务可能很简单,但我是这个 apache 的新手,如果有人可以告诉我解决方案,这对我明天的截止日期会很好:)

谢谢!

【问题讨论】:

【参考方案1】:

经过一些研究和谷歌搜索进一步能够做到这一点。这是我所做的 - 可能对面临同样问题的人有所帮助:

在机器 B 的 httpd.conf 文件中添加以下内容:

ProxyPass /v1/customer C.C.C.C:8000/v1/customer

ProxyPassReverse /v1/customer C.C.C.C:8000/v1/customer

因此,如果来自客户端(机器 A)的调用是 B.B.B.B/v1/customer,那么它将是 转发给 C.C.C.C:8000/v1/customer

ProxyPass 需要 mod_proxy 模块。

【讨论】:

勾选你自己的答案!我在 CherryPy 上遇到了完全相同的问题。 此链接提供有关此digitalocean.com/community/tutorials/… 的更多详细信息。 在 httpd.conf "LoadModule proxy_http_module modules/mod_proxy_http.so" 中取消注释后,上述解决方案对我有用

以上是关于Apache 将请求转发到另一台服务器的主要内容,如果未能解决你的问题,请参考以下文章

iptables 路由转发, 将一台服务器的IP转发到另一个另一台服务器上面(远程序防护)

iptables 从一台机到另一台机端口转发

简单的nginx模拟网站的负载均衡

如何实现所有的请求通过一台机器转发

将特定 servlet 映射为 Tomcat 中的默认 servlet

使用请求分派器将请求从一个 servlet 转发到另一个