0

我已经部分开发了一个从 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 脚本,或者可能是一些第三方脚本也可以减少我的一些时间。

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

PS:我不能将我的网站移动到专用服务器上,因为在不久的将来我将拥有大量它们并且它们会花费太多。

4

2 回答 2

3

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

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

在这两个选项中,我个人更喜欢 nginx,它健壮且轻量级,并且完全符合目的。我发现 Apache 比较麻烦,但是如果您已经在专用服务器上设置了 Apache,您可能更愿意使用它。

使用 Web 服务器进行代理的美妙之处在于它们了解底层协议。它们将保留标头、修改 cookie(保留会话)并正确翻译主机名。


阿帕奇配置

在这两种情况下,配置都非常简单,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、添加标头等。


务必查阅文档。我没有测试过这些配置中的任何一个,它们可能有点偏离,因为它们来自记忆+快速谷歌。

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

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

于 2012-07-24T09:08:59.190 回答
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

于 2012-07-22T17:45:52.533 回答