繁体   English   中英

关于开发RETS PHP隧道的建议

[英]Suggestion on developing a RETS PHP Tunnel

我已经部分开发了一个房地产网站,该网站可以从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:我不能将网站移到专用服务器上,因为在不久的将来,我将拥有很多服务器,而且它们的成本太高了。

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

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,添加标头等


内容参考文档。 我没有测试过这些配置中的任何一个,它们可能有点不足,因为它们来自内存+快速的Google。

确保通过代理不可达的服务器来测试您的应用程序,并确保它可以正确处理故障,因为您引入另一个故障点。

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

您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM