博文

目前显示的是 2017的博文

nginx反向代理,nginx的upstream和fastcgi模块(第31天)

图片
反向代理 : 工作在应用层的反向代理服务器,该代理服务器必须监听在80端口。lvs是工作在netfilter中的INPUT链上的,并不需要监听在80端口,因为lvs这货在数据从PREROUTING链进入之后,到达INPUT链就被LVS截获处理掉了(也就是调度到后端的RS了),所以请求报文根本没有机会进入到应用层。 反向代理服务器工作原理: 首先反向代理服务器本身也是一个http服务,监听在80端口,当它接受到客户端的请求之后,该反向代理服务器会把自己从当成客户端,来向后端的服务器发送客户端的请求。后端的服务器接收到该请求后,向该反向代理服务器发送响应报文。反向代理服务器接收到响应报文之后就将该报文发回给客户端。这里的后端服务器在nginx中被称之为upstream server。 因为反向代理工作在应用层,该代理可以知道http请求的URL,分析该URL,可以获取到请求的资源是静态的(http://xxxxx.jpg   .css  .js),或者是动态的(http://xxxxx.php   .do   .jsp),从而可以做到动静分离。调度到后端的upstream server,upstream server也分为静态和动态server,而且,静态资源不需要做session保持,动态资源需要做session保持。 session保持方法: session绑定:sh算法或者持久链接,来自同一个来源IP的请求都调度至同一个upstream server session复制:每一个upstream server都保存其它的upstream server的session session服务器:session集中保存到memcached,redis(key-value,kv store)中 缓存为王的时代,可以在反向代理服务器中加入对于upstream server的缓存。比如加入PCI-E的固态作为缓存硬件。缓存一般也都是key-value存储的,一般来说key可以存储URL的哈希结果,value就存储URL的对应的资源。 对于任何一个负载均衡器都提供对于后端服务器的健康状态监测。 有一点,nginx的反向代理是工作在应用层的,必然限制与so...

LVS进阶(第30天)

回顾: lvs: l4 switch, l4 router vip, port, {tcp|udp} lvs-type: lvs-nat, masquerade lvs-dr, gateway lvs-tun, ipip lvs-fullnat (keepalived) lvs scheduler:  lvs调度算法 static: rr, wrr, sh, dh dynamic: lc, wlc, sed, nq, lblc, lblcr overhead: active connections, inactive connections lvs-dr:    vip和dip/rip不再同一个网段时,             vmware的网络模型:bridge, nat, host-only, lvs(3) netfilter: PREROUTING --> INPUT PREROUTING --> FORWARD --> POSTROUTING OUTPUT --> POSTROUTING ipvs: 工作在INPUT链上 FWM :防护墙标记 当请求到达的时候,请求是先进入ipvs调度机的PREROUTING链上的,然后是INPUT链接,或者是先进入PREROUTING链,然后是FORWARD链,2种可能中都必须要经由PREROUTING链,所以netfilter就可以在PREROUTING链上对某特征报文打标机,比如对tcp的80端口的报文打标记(而要对报文打标记,要用到iptables命令的-j选项指定动作为打标记)。 具体做法如下,分2步:      PREROUTING:   第1步,使用iptables对某种特征的报文打标记           iptables  -j MARK --set-mark 10     设计标记10   ...

windows逆向初级公开课

图片
1:进制 程序在计算机中是以二进制的方式存储的。 16进制:0(0000),1(0001),2(0010),3(0011),4(0100),5(0101),6(0110),7(0111),8(1000),9(1001),A(1010),B(1011),C(1100),D(1101),E(1110),F(1111)   (牢记,虽然计算机只能处理二进制数据,但是工具来表示二进制数据的话,人看起来不方便,一般使用十六进制表示) 2:字节,字,双字 字节:1个字节有8位(bit) 内存中存储的数据以字节为单位 字(word):1个字有2个字节,也就是16位 双字(dword):1个双字由2个字组成,也就是4个字节,就是32位 3:从整体上把握一个PE文件 第1:程序是从哪里开始执行的? 第2:代码(code)存储在哪里? 第3:数据(data)存储在哪里? PE文件结构:(查找AddressOfEntryPoint和BaseOfCode,BaseOfData) 工具:LoadPE的使用 软件加壳(打乱pe结构)与软件调试。 硬编码: 比如:55      表示   PUSH EBP           8BEC  表示  MOV EBP, ESP 特征码:也就是那些硬编码,每个软件如果不升级的话,都有一些特定的编码的特征。类似于指纹。 反汇编引擎:硬编码到汇编代码的过程。 用一句话总结逆向: 从二进制程序入手,通过反汇编引擎得到汇编代码,汇编代码再到C程序。 逻辑运算:与,或,非,异或 4:加法的运算 : A+B 1:计算A xor B  等于R 2:计算A and B 假设等于L,L左移1位,如果结果等于0,则R就作为A+B的结果,如果结果不是0,就继续往下运算。 3:R赋值给A,L左移1位后的结果复制给B,A xor B,重复上面的过程。。。。。 5:加密与解密 xx 6:cpu和内存 数据可以存储到cpu集成的寄存器和内存中。 32位通用寄存器的制定用途: eax  累加器 ...

ch39元类(python)

class Extras:     def extra(self, args):              # Normal inheritance: too static         ... class Client1(Extras): ...              # Clients inherit extra methods class Client2(Extras): ... class Client3(Extras): ... X = Client1()                           # Make an instance X.extra()                               # Run the extra methods def extra(self, arg): ... class Client1: ...                      # Client augments: too distributed if required():     Client1.extra = extra class Client2: ... if required():     Client2.extra = extra class Client3: ... if required():     Client3.extra = extra X = Client1() X.extra() ...

ch38装饰器(python)

# NOTE: for the last 2 chapters, I am mostly including working # code examples here; to expand pseudocode listings early in # the chapters, type their code parts in your editor. def decorator(cls):                             # On @ decoration     class Wrapper:         def __init__(self, *args):              # On instance creation             self.wrapped = cls(*args)         def __getattr__(self, name):            # On attribute fetch             return getattr(self.wrapped, name)     return Wrapper @decorator class C:                             # C = decorator(C)     def __init__(self, x, y):        # Run by ...