Nginx 笔记:反向代理&项目发布&搭建集群一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术。关于正向代理的概念如下: 正向代理(forward)是一个位于客户端【用户A】和原始服务器(origin server)【服务器B】之间的服务器【代理服务器Z】,为了从原始服务器取得内容,用户 A 向代理服务器 Z …
淘宝请了 Sun 的高级工程师来帮忙做 Java 架构。那么他们是如何做到修改编程语言而不改变网站使用呢——模块化替换,今天写好了 A 模块,另开一个新域名,将连接指向该模块,同时别的模块不变,等到全部模块完成的时候,原域名放弃。Sun 公司坚持使用 EJB 作为控制层,加上使用 iBatis 作为持久层,一个可扩展且高效的 Java EE 应用诞生了。
送走 Sun 的大牛们之后,阿里的数据存储又遇到了瓶颈,于是忍痛买了一台 IBM 小型机,也就有了IOE(IBM + Oracle + EMC)这样的传说。
2004年底,淘宝注册用户400万,PV 4000万/day,全网成交额10个亿。
2005年 Spring 诞生了,早闻 Spring 框架在 Web 应用不可或缺,而在淘宝网,Spring 也达到了 Rod Johnson 设计它的目的——替代 EJB。
Dubbo 是阿里巴巴内部的 SOA 服务化治理方案的核心框架,每天为2000+ 个服务提供3000000000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo 自2011年开源后,已被许多非阿里系公司使用。
1.2.3 技术发展总结
1、单节点架构
2、集群架构
3、集群+分布式架构
1.2 代理概述
1.2.1 正向代理(Forward Proxy)
一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术。关于正向代理的概念如下:
正向代理(forward)是一个位于客户端【用户A】和原始服务器(origin server)【服务器B】之间的服务器【代理服务器Z】,为了从原始服务器取得内容,用户 A 向代理服务器 Z 发送一个请求并指定目标(服务器B),然后代理服务器 Z 向服务器 B 转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
这就是正向代理的意义所在。而为什么要用代理服务器去代替访问方【用户A】去访问服务器 B 呢?这就要从代理服务器使用的意义说起。
使用正向代理服务器作用主要有以下几点:
访问本无法访问的服务器 B,如图
我们抛除复杂的网络路由情节来看上图,假设图中路由器从左到右命名为 R1、R2。假设最初用户 A 要访问服务器 B 需要经过 R1 和 R2 路由器这样一个路由节点,如果路由器 R1 或者路由器 R2 发生故障,那么就无法访问服务器 B 了。但是如果用户 A 让代理服务器 Z 去代替自己访问服务器 B,由于代理服务器 Z 没有在路由器 R1 或 R2 节点中,而是通过其它的路由节点访问服务器 B,那么用户 A 就可以得到服务器 B 的数据了。现实中的例子就是 FQ。不过自从 VPN 技术被广泛应用外,FQ 不但使用了传统的正向代理技术,有的还使用了VPN 技术。
加速访问服务器 B
这种说法目前不像以前那么流行了,主要是带宽流量的飞速发展。早期的正向代理中,很多人使用正向代理就是提速。还是如上图,假设用户 A 到服务器 B,经过 R1 路由器和 R2 路由器,而 R1 到 R2 路由器的链路是一个低带宽链路。而用户 A 到代理服务器 Z,从代理服务器 Z 到服务器 B 都是高带宽链路。那么很显然就可以加速访问服务器 B 了。
Cache 作用
Cache(缓存)技术和代理服务技术是紧密联系的(不光是正向代理,反向代理也使用了Cache(缓存)技术。还如上图所示,如果在用户 A 访问服务器 B 某数据 D 之前,已经有人通过代理服务器 Z 访问过服务器 B 上得数据 D,那么代理服务器 Z 会把数据 D 保存一段时间,如果有人正好取该数据 D,那么代理服务器 Z 不再访问服务器 B,而把缓存的数据 D 直接发给用户 A。这一技术在 Cache 中术语就叫 Cache 命中。如果有更多的像用户 A 的用户来访问代理服务器 Z,那么这些用户都可以直接从代理服务器 Z 中取得数据 D,而不用千里迢迢的去服务器 B 下载数据了。
客户端访问授权
这方面的内容现今使用的还是比较多的,例如一些公司采用 ISA SERVER 做为正向代理服务器来授权用户是否有权限访问互联网,如下图
用防火墙作为网关,用来过滤外网对其的访问。假设用户 A 和用户 B 都设置了代理服务器,用户 A 允许访问互联网,而用户 B 不允许访问互联网(这个在代理服务器 Z 上做限制)这样用户 A 因为授权,可以通过代理服务器访问到服务器 B,而用户 B 因为没有被代理服务器 Z 授权,所以访问服务器 B 时,数据包会被直接丢 弃。
隐藏访问者的行踪
如下图,我们可以看出服务器 B 并不知道访问自己的实际是用户 A,因为代理服务器 Z 代替用户 A 去直接与服务器 B 进行交互。如果代理服务器 Z 被用户 A 完全控制(或不完全控制),会惯以「肉鸡」术语称呼。
总结一下:正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内 容返回给客户端。客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的 IP 地址,还有代理程序的端口。
用户 A 始终认为它访问的是原始服务器 B 而不是代理服务器 Z,但实用际上反向代理服务器接受用户 A 的应答,从原始资源服务器 B 中取得用户 A 的需求资源,然后发送给用户 A。由于防火墙的作用,只允许代理服务器 Z 访问原始资源服务器 B。尽管在这个虚拟的环境下,防火墙和反向代理的共同作用保护了原始资源服务器 B,但用户 A 并不知情。
负载均衡,如下图:
当反向代理服务器不止一个的时候,我们甚至可以把它们做成集群,当更多的用户访问资源服务器 B 的时候,让不同的代理服务器 Z(x)去应答不同的用户,然后发送不同用户需要的资源。
当然反向代理服务器像正向代理服务器一样拥有 Cache 的作用,它可以缓存原始资源服务器 B 的资源,而不是每次都要向原始资源服务器 B 请求数据,特别是一些静态的数据,比如图片和文件,如果这些反向代理服务器能够做到和用户 X 来自同一个网络,那么用户 X 访问反向代理服务器 X,就会得到很高质量的速度。这正是 CDN 技术的核心。如下图:
基本上,网上做正反向代理的程序很多,能做正向代理的软件大部分也可以做反向代理。开源软件中最流行的就是 squid,既可以做正向代理,也有很多人用来做反向代理的前端服务器。另外 MS ISA 也可以用来在 Windows 平台下做正向代理。反向代理中最主要的实践就是 Web 服务,近些年来最火的就是 Nginx 了。网上有人说 Nginx 不能做正向代理,其实是不对的。Nginx 也可以做正向代理,不过用的人比较少了。
用户 A 和用户 B 并不知道行为管理设备充当透明代理行为,当用户 A 或用户 B 向服务器 A 或服务器 B 提交请求的时候,透明代理设备根据自身策略拦截并修改用户 A 或 B 的报文,并作为实际的请求方,向服务器 A 或 B 发送请求,当接收信息回传,透明代理再根据自身的设置把允许的报文发回至用户 A 或 B,如上图,如果透明代理设置不允许访问服务器 B,那么用户 A 或者用户 B 就不会得到服务器 B 的数据。
二、在Linux下发布项目
使用的为:CentOS 系统
2.1 Linux系统上安装JDK
登录 Linux 系统后,先检测是否安装了 jdk,运行:java -version,如果有 OpenJDK,将其卸载,我们安装使用 SunJDK。关于两者相关区别: