我已经部分开发了一个属性网站,用于从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:我无法将我的网站转移到专用服务器上,因为在不久的将来我会有很多这样的服务器而且费用太高。答案 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