Php 使用Elasticsearch的AJAX通信流量和访问控制解决方案? 情况:
对于一个网络商店,我想使用Elasticsearch构建页面化的产品列表——以及这些列表上的过滤器。我想绕过应用程序完全运行的PHP/MySQL服务器,通过AJAX调用直接从客户的浏览器与Elasticsearch通信。优点是:Php 使用Elasticsearch的AJAX通信流量和访问控制解决方案? 情况:,php,ajax,amazon-web-services,elasticsearch,Php,Ajax,Amazon Web Services,elasticsearch,对于一个网络商店,我想使用Elasticsearch构建页面化的产品列表——以及这些列表上的过滤器。我想绕过应用程序完全运行的PHP/MySQL服务器,通过AJAX调用直接从客户的浏览器与Elasticsearch通信。优点是: PHP/MySQL服务器上的大部分负载将由ES集群处理 CDN机会(扩展!) 问题: 这种方法会减轻后端服务器的大量负载,但会产生一些新问题。匿名用户将生成大量请求,但我们需要对这些请求进行一些控制: 交通管制: 如何防范恶意用户通过这种方式拨打大量电话并扫描/下
- PHP/MySQL服务器上的大部分负载将由ES集群处理
- CDN机会(扩展!)
- 如何防范恶意用户通过这种方式拨打大量电话并扫描/下载我们的整个产品目录?(例如,竞争性刮削定价信息)
- 如何阻止(不知何故)被确定为行为不好的IP
- 如何确保前端只能进行我们希望允许的查询
- 如何确保客户只看到结果字段的选择,而不能从ES中获取任何不适合他们的数据
- www.elastic.co/found,他们的高级解决方案有一个“屏蔽”服务,它似乎不涵盖上述所有情况(据我所知,只有IP阻塞),但有一个自定义插件()这可以对结果字段进行过滤,并提供一种进行用户管理等的方法。这似乎是一个合理的选择,但成本很高,并将应用程序与“找到的”产品联系起来。如果需要,我们应该能够交换合作伙伴
- Amazon AWS Elasticsearch服务具有基本的IAM支持,可以将CloudFront置于其前面,但不提供任何访问控制
- 安装单独的L7应用程序过滤解决方案,用于检测刮刀等
是否有人采用这种方法并找到了解决所有这些问题的良好设置?我建议的第一件事是限制从安全组后面访问弹性搜索实例,并且只允许在端口22、80、9200上访问应用服务器IP地址,和9300,这是ElasticSearch使用的端口 至于防止报废,没有绝对的保护解决方案,但是,如果您的目的只是限制这些报废程序在您的应用程序服务器和ES实例上的负载,那么您可以查看针对速率受限用户的,他们在页面上使用的exmaple限制为每秒5次请求,这对于普通用户来说似乎非常合理,如果需要进行费时的工作,则可以进一步降低请求量。我建议您看看,这是一款由Elastic公司的员工开发的商业产品。它应该负责您想要设置的大多数控件。