ReverseProxy - 将一些 URL 发送到另一台服务器进行预处理

Posted

技术标签:

【中文标题】ReverseProxy - 将一些 URL 发送到另一台服务器进行预处理【英文标题】:ReverseProxy - send some URLs to another server for preprocessing 【发布时间】:2012-09-19 23:26:00 【问题描述】:

有一个托管在 Apache 上的现有应用程序。我想将一些 url(发布表单)发送到另一台服务器(不是 apache - 只是一个程序)进行一些预处理。这就是它的组织方式

1) 我在 Apache conf 上添加了一个额外的监听端口(比如 1234)

2)在端口 80 上添加了一个反向代理,以将一些 url 发送到第二台服务器,监听它自己的端口

3) 由于实际的 html 托管在 apache 上,第二台服务器在端口 1234 上从 Apache 请求所需的页面。然后它修改 html(post 表单)并提供它。它再次将发布的数据修改并发送回 apache。

我可以通过以下步骤实现上述目标 1) 在我现有的 htdocs 目录结构中 - 我创建了 2 个名为 dir1 和 dir2 的新子目录

2) 所有需要预处理的表格,我移动到目录 dir1。所有处理 post 数据的脚本,我移到 dir2。我更改其他 html 以更新路径。

3) 我添加了以下代理配置

ProxyPass /dir1 http://localhost:1234/dir1

ProxyPassReverse /dir1 http://localhost:1234/dir1

dir2 也类似。

这工作正常,但我想知道这些是否是更好的方法。 我正在寻找的主要改进是以这样一种方式进行反向代理配置,即我不会干扰托管在 htdocs 中的原始应用程序(通过将内容移动到 dir1、dir2 - 更新引用等)。有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

您描述的设置背后的整个想法有点异国情调。

我想知道为什么你不能简单地重写那些你想“拦截”的表单的 url,并让请求或回复由一些脚本语言(如 php 或其他)处理。这样您就不需要第二台服务器,无需在原始应用程序布局内进行任何更改,并且您在 apache 内拥有完整的脚本环境,而不必使用外部程序。

所以是这样的:

get form-1.html 
=> deliver form-1.html 
=> submit form-1.html 
=> process form-1.html

get form-2.html 
!=> rewrite to intercept.php?form=form-2.html
=> intercept form-2.html for preparation
=> deliver intercepted form-2.html
=> submit form-2.html
!=> rewrite to intercept.php?form=form-2.html
=> intercept form-2.html for processing
=> process form-2.html

(form-1不被拦截,form-2被拦截)

【讨论】:

我已经有了第二台服务器 - 将整个功能重写为 php 脚本是一项艰巨的任务。我的问题是如何将它与对原始设置的最小更改进行集成。 啊,好的。您仍然可以使用 php 作为包装器并从那里调用“程序”,以防止在这个相当奇怪的设置中使用两台服务器的麻烦。但显然你更适合判断:-)

以上是关于ReverseProxy - 将一些 URL 发送到另一台服务器进行预处理的主要内容,如果未能解决你的问题,请参考以下文章

Golang-ReverseProxy源码分析

golang 反向代理reverseproxy源码分析

reverseProxy:如何更改嵌入的 JavaScript 文件中的内容

nginx 的 负载均衡

如何在反向代理后面获取应用程序基本 URL

PHP 通过 URL 发送加密数据