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

时间:2012-09-28 05:03:33

标签: apache apache2 reverse-proxy httpd.conf mod-proxy

Apache上存在一个现有的应用程序。我想将一些网址(Post Forms)发送到另一台服务器(不是apache - 只是一个程序)进行一些预处理。这是如何组织的

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

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

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

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

2)所有需要预处理的表单,我移动到目录dir1。所有处理帖子数据的脚本,我都转到dir2。我改变其他htmls来更新路径。

3)我添加了以下Proxy confs

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

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

同样熟悉dir2。

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

1 个答案:

答案 0 :(得分:0)

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

我想知道为什么你不能简单地重写那些你想要“拦截”的形式的网址,并通过某些脚本语言(如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

(表格-1不被截取,表格-2被截获)