关于开发RETS PHP隧道的建议



我已经部分开发了一个房地产网站,可以从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服务器还需要登录,因此应该正确维护会话。

我想有一个快速/最好的解决方案来做这项工作。可能是通过.htaccess或流式php脚本,也可能是一些第三方脚本,也可以节省一些时间。

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

p.S:我不能把我的网站移到专用服务器上,因为在不久的将来我会有很多这样的网站,而且它们的成本太高了。

我个人会选择反向代理方法。这将允许您根据可配置的标准智能地转发请求。

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文档中找到

您应该注意,这个不能进入.htaccess文件中。它必须在主服务器配置中。


nginx配置

与简单相同

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

HttpProxyModule文档中还有大量用于缓存、重写URL、添加标头等的选项。


do查阅文档。我还没有测试过这两种配置,它们可能有点偏离,因为它们来自内存+快速谷歌。

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

我的工作假设您能够配置自己的专用服务器。如果不是这样,你的主人可能会愿意帮助你。如果没有,请给我留言,我会尝试想出一个更健壮的卷曲选项。

您可以通过使用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/.htpasswd保护。

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

最新更新