python通过cgi生成反向代理
我需要写一个CGI页面,这个页面就像一个反向代理,负责在用户和另一个页面(mbean)之间传递请求。问题是每个mbean使用的端口不同,而我事先不知道用户想要访问哪个端口。
所以我需要做的事情有以下几点:
A) 给用户一个页面,让他们选择想要访问的应用程序。
B) 根据用户的选择,启动一个反向代理(这会告诉我端口、服务器等信息)。
C) 用户通过这个反向代理连接到远程的mbean页面,这样他们就不会“离开”最初的页面。
之所以要这样做,是因为用户无法直接访问任何内部应用程序,他们只能访问初始的80端口。
我看过twisted,感觉它可以完成这个任务。但我不知道如何在CGI中启动twisted进程,以便它能够建立连接并在反向代理框架内保持后续连接。
顺便说一下,我并不一定要用twisted,如果有其他工具能做得更好,我非常乐意听听。像mod_proxy这样的东西我不能用,因为涉及到的端口范围太广,配置起来会非常麻烦(大约需要1000个不同的代理设置)。
1 个回答
2
你不需要再启动一个新的进程,这样会让事情变得复杂。下面是我在当前项目中类似做法的步骤:
- 首先,创建一个WSGI应用,这个应用可以在一个网页服务器后面运行。
- 然后,创建一个请求处理器(或者叫“视图”),只要用户没有会话ID的cookie,就可以通过任何网址来访问这个处理器。
- 在这个请求处理器里,用户可以选择目标应用,以及相关的主机名、端口号等等。这个处理器会和目标应用建立连接,比如使用httplib,并为这个连接分配一个会话ID。接着,它会设置会话ID的cookie,并把用户重定向回同一页面。
- 现在,当用户访问这个应用时,你可以利用已经打开的http连接来重定向请求。需要注意的是,WSGI支持将一个打开的类似文件的对象作为响应返回,这样可以提高性能,包括那些由httplib提供的对象。