关于开发RETS PHP隧道的建议

时间:2012-07-19 12:57:39

标签: php http-tunneling rets proxytunnel

我已经部分开发了一个属性网站,用于从RETS IDX获取属性数据。您可能知道RETS服务器通过http协议侦听端口6103。我的网站部署在共享主机上,因此我无法连接到6103端口。我有一个专用服务器(允许连接到端口6103)。我想将此专用服务器用作我的网站和RETS IDX服务器之间的中间层。我的问题是我想开发那个中间层脚本,即HTTP隧道。

我的网站会将所有RETS请求发送到此隧道,同时将其发送到RETS IDX服务器,其响应将在同一时间发送回网站。

                         port 80                                 port 6103

Website (shared hosting) ----------> Tunnel (Dedicated hosting)  -----------> RETS Server

RETS Server也需要登录,因此应该正确维护会话。

我希望有快速/最佳解决方案来完成这项工作。可能是通过.htaccess或流式PHP脚本或者可能是某些第三方脚本也可以减少我的一些时间。

我很想听到你有任何想法或建议。

P.S:我无法将我的网站转移到专用服务器上,因为在不久的将来我会有很多这样的服务器而且费用太高。

2 个答案:

答案 0 :(得分:3)

我个人会采用Reverse Proxy方法。这将允许您根据可配置的标准智能地转发请求。

Apache和nginx都具有反向代理功能(事实上它是nginx的最初目的)。对于Apache,您需要使用mod_proxy,而nginx具有内置的功能,除非您在编译之前明确禁用它。

在这两个选项中,我个人更喜欢nginx,它坚固轻巧,完全适合用途。我发现Apache更麻烦,但是如果你已经在专用服务器上安装了Apache,你可能更愿意使用它。

使用Web服务器代理的好处是,他们了解底层协议。它们将保留标头,修改cookie(保留会话)并正确翻译主机名。

<小时/> Apache配置

在这两种情况下,配置都非常简单,Apache配置如下所示:

<Location /proxy-location/>
    ProxyPass /rets http://rets-server:6103/api/path
    ProxyPassReverse /rets http://rets-server:6103/api/path
</Location>

还可以选择调整Cookie,设置超时等。所有这些都可以在mod_proxy documentation

中找到

您应该注意,此无法进入.htaccess文件。它必须进入主服务器配置。

<小时/> nginx配置

同样简单

location /proxy-location {
    proxy_pass        http://rets-server:6103/api/path;
}

HttpProxyModule documentation中的大量选项用于缓存,重写网址,添加标题等。


执行查阅文档。我没有测试过这些配置中的任何一种,它们可能有点不对,因为它们来自内存+快速谷歌。

确保您通过代理到无法访问的服务器来测试您的应用,并确保它正确处理失败,因为您 引入了另一个故障点。

我正在假设您可以配置自己的专用服务器。如果不是这种情况,您的主人可能愿意帮助您。如果没有给我留言,我会尝试提出一个更强大的卷曲选项。

答案 1 :(得分:0)

您可以使用curl的PHP扩展来实现此目的。

示例代码可以是:

$url = $_GET['url'];

$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$content = curl_exec($ch);

echo $content;

显然你必须添加保护,或者添加.htaccess / .htpasswrd保护。

可以在那里找到更完整的代码,包括cookie支持等:https://github.com/cowboy/php-simple-proxy