我已经部分开发了一个从RETS IDX获取属性数据的属性网站。您可能知道RETS服务器通过http协议监听端口6103。我的网站部署在共享主机上,由于无法连接到6103端口。我有一个专用的服务器(它允许连接到端口6103)。我想使用这个专用服务器作为我的网站和RETS IDX服务器之间的中间层。我的问题是我想要开发中间层脚本,即HTTP隧道。
我的网站将发送所有RETS请求到此隧道,同时将其发送到RETS IDX服务器,其响应将在同一时刻发送回网站。
port 80 port 6103
Website (shared hosting) ----------> Tunnel (Dedicated hosting) -----------> RETS ServerRETS Server还需要登录,因此应该正确维护会话。
我想要有快速/最佳的解决方案来完成这项工作。可能是通过.htaccess或流式php脚本,也可能是一些第三方脚本也可以节省我的一些时间。
我很乐意听到你的任何想法或建议。
附言:我不能移动我的网站到一个专用的服务器,因为在不久的将来,我将有大量的他们,他们将花费太多。
发布于 2012-07-24 17:08:59
我个人倾向于使用Reverse Proxy方法。这将允许您基于可配置的标准智能地转发请求。
Apache和nginx都有反向代理功能(事实上这是nginx的初衷)。对于Apache,您需要使用mod_proxy,而nginx具有内置的功能,除非您在编译前显式禁用它。
在这两个选项中,我个人更喜欢nginx,它是健壮和轻量级的,完全适合用途。我发现Apache比较麻烦,但是如果您已经在专用服务器上设置了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文件中 go。它必须在主服务器配置中。
nginx配置
同样简单
location /proxy-location {
proxy_pass http://rets-server:6103/api/path;
}同样,HttpProxyModule documentation中有大量用于缓存、重写urls、添加头等的选项。
请务必查阅文档。我还没有测试过这两种配置,它们可能有点不对劲,因为它们来自memory +一个快速的google。
确保通过代理到无法访问的服务器来测试您的应用程序,并确保它正确处理故障,因为您正在引入另一个故障点。
我的工作假设您能够配置自己的专用服务器。如果不是这样,你的主人可能会愿意帮助你。如果没有,请给我留言,我会试着想出一个更健壮的卷曲选项。
发布于 2012-07-23 01:45:53
您可以使用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
https://stackoverflow.com/questions/11561381
复制相似问题