在Linux虚拟机中搭建Nginx服务器以及SSL、反向代理和负载均衡的实现目录一、虚拟机下网络的网络配置 (2)1、Bridged模式 (2)2、NAT 模式 (3)3、host-only 模式: (4)4、作业环境网络拓扑图 (4)二、Nginx的安装与配置 (5)1、Nginx简介 (5)2、安装前的环境准备 (5)3、下载安装 (6)4、控制Nginx服务 (6)5、配置nginx (7)6、负载测试 (9)三、基于OpenSSL部署https网站 (9)1、OpenSSL以及SSL/TLS协议简介: (9)2、Linux下配置https (10)3、SSL/TSL协议分析 (12)四、用Nginx实现负载均衡和反向代理 (15)1、反向代理的实现 (15)2、负载均衡 (18)一、虚拟机下网络的网络配置1、Bridged模式在桥接模式下,VMware虚拟机里的系统就像是局域网中的一台独立的主机,它可以访问同一个网段内任何一台机器,即可以相互ping通。
在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。
同时,由于这个虚拟系统是局域网中的一个独立的主机系统,就可以手工配置它的IP,DNS服务器,网关等信息,以实现通过局域网的网关或通过交换机访问外网。
图1本地物理网卡和虚拟网卡通过虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位。
Vmware默认给虚拟系统提供了一个虚拟网卡(linux下默认为eth0设备),虚拟系统通过该网卡与外部通信。
图中虚拟交换机由vmware提供,其默认设备名为VMnet0。
如图1所示。
2、NAT 模式NAT 即Network Address Translation 缩写,即网络地址转换,由NAT服务完成,在vmware里默认为VMnet8虚拟交换机,它将虚拟系统的IP地址转换成宿主机的IP地址,从而借用宿主机访问其他主机。
使用NAT模式,也可以让虚拟系统通过宿主机器所在的网络来访问公网。
在这种模式下,虚拟系统是不能被LAN内其他PC访问的(宿主机可以,稍后讲),只能虚拟机以宿主机的名义访问LAN内的计算机。
默认情况下NAT模式的虚拟系统的TCP/IP 配置信息由VMnet8(NAT)虚拟网络的DHCP服务器提供,因此采用NAT模式最大的优势是虚拟系统接入互联网非常简单,你不需要进行任何其他的配置,只需要宿主机器能访问互联网即可。
图2VMware Network Adepter VMnet8虚拟网卡的作用就是为主机和虚拟机的通信提供一个接口,即使主机关闭该网卡,虚拟机仍然可以连接到Internet,但是主机和虚拟机之间就不能互访了,还有访问局域网内的其他计算机,也是通过NAT服务实现。
如图2所示3、host-only 模式:在Host-Only模式下,虚拟系统所在的虚拟网络是一个全封闭的网络,它唯一能够访问的就是宿主机。
其实Host-Only网络和NAT网络很相似,不同的地方就是Host-Only网络没有NAT服务,所以虚拟网络不能连接到Internet,即虚拟系统无法上网。
在host-only模式中,所有(Vmware创建的多个虚拟系统)的虚拟系统是可以相互通信的,当然在NAT模式下也可以,但虚拟系统和真实的网络是被隔离开的,主机和虚拟机之间的通信是通过VMware Network Adepter VMnet1虚拟网卡来实现的。
如图3所示。
图34、作业环境网络拓扑图如图4,nginx做服务器的前端,提供反向代理和负载均衡;两台apache服务器(linux debian发行版自带,可直接使用)做后端的web服务器,提供具体的web服务;从宿主主机的浏览器来进行访问实验。
整个网络使用虚拟机提供的NAT模式。
宿主主机操作系统为window7,服务器均为Linux debian 3.13.7,虚拟机软件为VMware Workstation 10.0.1。
图4二、nginx的安装与配置1、Nginx简介Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP 代理服务器。
Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru 站点开发的。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
由于其较高的性能,现在的市场占有率已达到第三。
特点:支持高并发连接,对静态页面处理速度快内存消耗少,轻量级成本低廉,开源可扩展性强,有丰富的模块2、安装前的环境准备●由于nginx是由C编写的,所以要安装gcc 编译器,不过一般发行版都已安装●由于nginx会使用正则表达式语法库,所以要安装PCER。
●由于nginx要用到gzip压缩算法,所以要安装zlib库●本次实验需要实现SSL,所以安装openssl3、下载安装在debian下可以使用其强大的包管理工具apt-get install nginx从其软件库实现一步安装,但是无法自定义配置模块,所以在这里我们进行手动安装。
I.从官网下载最新的稳定版,目前为1.6.0,并解压。
II.配置,可以选择安装路径,选上自己需要的可选模块,配置安装后无法更改。
III.编译安装4、控制Nginx服务在nginx安装目录的sbin下为我们提供了可执行的nginx控制文件,在这里我们要制作一个init脚本并将其添加为系统文件,使其能随着系统自己启动。
I.制作init脚本。
进入nginx的官方wiki——/InitScripts,找到自己发行版的脚本,然后编辑/etc/init.d/nginx 然后插入所选的脚本,注意在脚本中的DAENOM变量一定要替换为自己nginx控制文件的路径。
其他可以默认或根据情况修改。
DAEMON=/usr/local/nginx-1.6.0/sbin/nginxII.因为新建的脚本只有读写权限,所以要为其添加可执行权限III.将制作好的init脚本添加为系统级别初始化脚本5、配置nginx由于nginx为我们提供了比较详尽的配置实例,所以我们只需要在其基础上修改添加就行了,编辑nginx配置文件(位于/usr/local/nginx/conf/nginx.conf)。
其体系结构如图5。
图5在这里先介绍一下nginx的三大基本模块,具体配置见图6。
●核心模块——基本特征和指令,例如进程管理和安装●事件模块——用于网络配置●配置模块——提供包含机制在图6中前5行为核心模块,包括使用的用户和用户组、worker进程数和优先级、对多核CPU的使用等。
events为事件模块,包括进程最大连接等。
配置模块用于include其他配置文件,用于减少主配置文件的复杂度。
图6在本次实验中,其实我们更关心的是http模块。
在这里先简介一下http模块的结构。
在图5中我们可以看到http模块可以分为三个区段——http,server,location。
其中一个http 可以包含多个server,一个server又可以包含多个location 。
并且具有继承的关系。
●http用于定义一些适用于全局server的指令和插入相关模块区段。
●server用于声明一个站点,并且在此区段中使用自己的配置。
●location用于找到网站的一个特定的位置,可根据设定正则表达式来与请求的url相匹配从而决定怎样响应请求。
其具体配置见图7,其中http区段说明了要包含的mime 类型和默认的类型,连接超时时间和是否使用gzip压缩算法等,这些都会继承到server中。
而server包含了站点的主机名和监听的端口号等。
location则定义了请求的url会返回那个页面。
图76、负载测试注:虚拟环境不反映生产环境中的能力三、基于OpenSSL部署https网站互联网的通信安全,建立在SSL/TLS协议之上。
不使用SSL/TLS的HTTP通信,就是不加密的通信。
所有信息明文传播,带来了三大风险。
窃听风险(eavesdropping):第三方可以获知通信内容。
篡改风险(tampering):第三方可以修改通信内容。
冒充风险(pretending):第三方可以冒充他人身份参与通信。
SSL/TLS协议是为了解决这三大风险而设计的,希望达到:所有信息都是加密传播,第三方无法窃听。
具有校验机制,一旦被篡改,通信双方会立刻发现。
配备身份证书,防止身份被冒充。
1、OpenSSL以及SSL/TLS协议简介:OpenSSLOpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。
OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
SSL/TSL互联网是开放环境,通信双方都是未知身份,这为协议的设计带来了很大的难度。
而且,协议还必须能够经受所有匪夷所思的攻击,这使得SSL/TLS协议变得异常复杂。
互联网加密通信协议的历史,几乎与互联网一样长。
1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
1996年,SSL 3.0版问世,得到大规模应用。
1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。
2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。
最新的变动是2011年TLS 1.2的修订版。
2014年发现心脏滴血漏洞,波及整个互联网。
目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。
但是,主流浏览器都已经实现了TLS 1.2的支持。
TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。
2、Linux下配置httpsLinux下安装openssl组件sudo apt-get openssl使用openssl生成密钥使用openssl生成证书请求第2个命令是生成证书请求,会提示输入省份、城市、域名信息等,重要的是,email 一定要是你的域名后缀的。
这样就有一个csr文件了,提交给ssl提供商的时候就是这个csr 文件拷贝不需要密码的密钥文件签发证书第三步拷贝密钥文件,服务器重启是不需要再重新输入密码当然我这里并没有向证书提供商申请,而是在第4步自己签发了证书。