由于Elasticsearch没有提供权限管理功能(官方shield又收费),特开发此Proxy,可以针对Elasticsearch Rest的路径设置权限,可以指定信任IP,支持用户,群组授权
当前版本0.01试用版。
框架基于PHP-Swoole扩展开发,用fast-route库来做http route处理。
环境:linux2.6+、php5.5+、mysql5.5+、swoole1.7.20+
下载:https://github.com/xtjsxtj/esp
tar zxvf esp.zip cd esp ./bin/esp start 查看当前server进程状态: ./bin/esp status
系统级配置文件,全局生效,不能reload,只能restart
server_conf.php
<?php class server_conf { public static $config=array( 'server_name' => 'es_proxy', //server名称 'log_level' => NOTICE, //跟踪级别TRACE,DEBUG,INFO,NOTICE,WARNING,ERROR 'listen' => 9501, //listen监听端口 'worker_num' => 1, //工作进程数 'daemonize' => true, //是否以守护进程方式运行 'log_file' => '/home/jfy/testprog/esproxy/proxy/index.log', //log文件 ); }
工作进程配置文件,支持reloadworker_conf.php
<?php class worker_conf{ public static $config=array( 'log_level' => NOTICE, 'es_url' => 'http://localhost:9200', 'trust_ip' => [ '127.0.0.1' ], 'groups' => [ 'cpyf' => 'jfy,zyw', ], 'users' => [ 'jfy' => '123456', 'zyw' => '123456', ], 'auths' => [ ['OPTIONS', '/{param:.+}', '*'], ['GET', '/{param:.+}', '*'], ['POST', '/{param1}/_search', '*'], ['POST', '/{param1}/{param2}/_search', '*'], ['PUT', '/kibana-int/{param:.+}', '*'], ['DELETE', '/kibana-int/{param:.+}', '@cpyf'], ], ); }
针对Elasticsearch的访问权限配置上,只需要修改worker_conf配置文件即可。
配置文件一看上去就应该明白了:
es_url,后端Elasticsearch http地址
trust_ip,信任的IP列表,不做任何权限限制
groups,用户组列表,组下可包含多个用户,用户必须存在于users配置中
users,用户列表,用户名 => 密码
auths,访问详细rest路径权限设置
method restpath users
多个用户以","分隔,用户组以@开头,如:jfy,@cpyf表示用户jfy和用户组cpyf中的所有用户都可以访问
"*"表示所有用户均可以访问
当用户列表中指明用户或组时,http header中必须包括Basic Auth用户和密码信息:
Authorization: Basic amZ5OjttMzQ1Ng==
method 支持数组方式 ["GET","POST"]
restpath 访问Elasticsearch的具体路径,支持正则表达式,详情参见:https://github.com/nikic/FastRoute
user 授权访问的用户
关于更新进度 有超链接的文章是已经完成的,可以点击跳转直接看 没有超链接的文章是计划要写的,暂时还没写的,我会尽快完成 一、环境篇 ESP32-C3入门教程 环境篇①——简单介绍与硬件准备 ESP32-C3入门教程 环境篇②——Windows开发环境准备 ESP32-C3入门教程 环境篇③——VS Code IDE快速入门 ESP32-C3入门教程 环境篇④——VS Code IDE调试 ESP3
问题 你构建了一个自定义容器对象,里面包含有列表、元组或其他可迭代对象。 你想直接在你的这个新容器对象上执行迭代操作。 解决方案 实际上你只需要定义一个 __iter__() 方法,将迭代操作代理到容器内部的对象上去。比如: class Node: def __init__(self, value): self._value = value self._ch
代理用于帮助云联壹云平台访问由于网络或其它问题无法直接访问的云平台。 代理用于帮助 云联壹云 平台访问由于网络或其它问题无法直接访问的云平台。 使用场景: Google Cloud需要设置代理才能访问; 天翼云需要提前把访问的公网IP加入白名单才可以直接访问。 其他情况,如 云联壹云 部署在内网环境,需要通过代理访问外网的公有云平台等。 代理使用规则: 当云账号不设置代理时,代表直连网络; 当请求
代理 本节也将像上一节关于领域一样亲自动手。 我们的最终目标是与本章开头两个组织之间的协议中所示的类似设置。 这意味着您将需要两台FreeRADIUS服务器。 我们假设两者都有默认安装。
我的代码运行在具有单独JVM的单独虚拟机上。我想在此虚拟机上以tcpserver模式设置JaCoCo代理以收集覆盖率数据。然后,我将在我的maven项目中以tcpclient模式设置JaCoCo代理,以连接到上面提到的VM并获取覆盖率数据。 问题是代理不收集任何覆盖数据。在中创建了覆盖率数据文件,但该文件为空。 下面是代理选项:-Java agent:/usr/xx/plugins/org . j
本文向大家介绍浅谈Java代理(jdk静态代理、动态代理和cglib动态代理),包括了浅谈Java代理(jdk静态代理、动态代理和cglib动态代理)的使用技巧和注意事项,需要的朋友参考一下 一、代理是Java常用的设计模式,代理类通过调用被代理类的相关方法,并对相关方法进行增强。加入一些非业务性代码,比如事务、日志、报警发邮件等操作。 二、jdk静态代理 1、业务接口 2、业务实现类 3、代理类
太感谢你了,Pouya
代理 proxy 创建一个继承了指定类并且/或者实现了0个或者多个接口的类的对象。这对于创建那种必须要实现某个接口才能得到通知的listener对象很有用。举一个例子, 大家可以看下面 “Desktop Applications” 那一节的例子。那里我们创建了一个继承JFrame类并且实现ActionListener接口的类的对象。
map $sent_http_content_type $expires { "text/html" epoch; "text/html; charset=utf-8" epoch; default off; } server { listen 80;