(一)nginx的概述
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 Nginx是它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。 总结: Nginx 是一个高性能的 http的反响代理web服务器。 特点: 高性能, 并发能力强, 占用内存少, 稳定。
(二)nginx的应用场景
1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。 2、虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。 3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
(三)linux下nginx的安装
1.检索当前环境是否安装了Nginx
ps aux | grep nginx
2.安装Nginx
1)下载nginx
官网地址:http://nginx.org/en/download.html
2)将下载的nginx-1.8.0.tar.gz上传到linux操作系统
3)对nginx进行解压缩
tar zxf nginx-1.8.0.tar.gz
4)安装nginx需要先将官网下载的源码进行编译,需要安装gcc
yum install gcc-c++
5)在linux上安装pcre库
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。 yum install -y pcre pcre-devel
6)需要在linux上安装zlib库
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。 yum install -y zlib zlib-devel
7)需要在linux安装openssl库
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。 yum install -y openssl openssl-devel
8)进入nginx-1.8.0目录,使用configure命令进行按装
注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录 mkdir /usr/local/nginx #创建了一个安装目录。 mkdir -p /var/temp/nginx/client ./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi
9)编译安装
先使用make进行编译,然后使用make install再进行按装。 make make install /usr/local/nginx/ conf: 存放配置文件 html: 存放静态页面 sbin: 二进制文件
3.启动Nginx重启&关闭命令
进入nginx装好的nginx目录下的sbin目录下键入 ./nginx进行启动 启动: ./nginx ./nginx -s stop ./nginx -s reload 重启命令 ps - ef | grep nginx
4.访问测试
在浏览器键入:http://192.168.18.200 nginx 的配置文件: /conf/nginx.conf 从配置文件当中, 默认监听的端口号: 80 默认访问的地址: html/index.html 文件
二、nginx实现负载均衡
(一)负载均衡介绍
1.什么是负载均衡
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
2.负载均衡设计思想
一台普通服务器的处理能力是有限的,假如能达到每秒几万个到几十万个请求,但却无法在一秒钟内处理上百万个甚至更多的请求。但若能将多台这样的服务器组成一个系统,并通过软件技术将所有请求平均分配给所有服务器,那么这个系统就完全拥有每秒钟处理几百万个甚至更多请求的能力。这就是负载均衡最初的基本设计思想。 负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求按照某种策略分配到服务器集合的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡解决了大量并发访问服务问题,其目的就是用最少的投资获得接近于大型主机的性能。
(二)负载均衡环境搭建
tomcat 修改端口号: conf/server.xml 配置文件。
22:
69:
webapps/ROOT/index.jsp 修改了默认的背景颜色~
1.JDK配置
1)上传jdk-8u161-linux-x64.tar.gz到/usr/local目录下
2)对jdk-8u161-linux-x64.tar.gz进行解压缩
tar -zxf jdk-8u161-linux-x64.tar.gz
3)编辑/etc/profile进行环境变量设置
#JAVA_HOME export JAVA_HOME=/usr/local/jdk1.8.0_161 export PATH=$PATH:$JAVA_HOME/bin
4)重新进profile进行加载
source /etc/profile
5)检测jdk是否生效
javac java -version
2: tomcat 服务器集群
tomcat1 tomcat2 tomcat3
tomcat1: 8080
tomcat2: 修改conf/server.xml 配置文件对应的端口号。
22:
69:
112 :
修改: tomcat2访问的默认主页: /webapps/ROOT/index.jsp
tomcat3: 同理tomcat2
3.配置nginx管理多个tomcat
upstream tomcats{ server 192.168.18.200:8081; server 192.168.18.200:8082; } location / { proxy_pass http://tomcats; index index.html index.htm; }
(三)发动请求测试负载均衡
发送请求http://192.168.18.200/index.jsp 刷新进行测试。
三、nginx实现动静分离
(一)动静分离介绍
1.什么是动静分离
动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。
2.动静分离优势
Tomcat处理静态资源的效率并没有Nginx高,我们可以通过动静分离将静态资源和动态资源分割开来,Tomcat处理动态资源,Nginx响应静态资源,从而减轻tomcat的压力,各自发挥自己的长处,从而提高响应速度,提高访问能力。
(二)动静分离配置
1.创建文件名show.jsp的文件并在tomcat1上进行部署
<%@ page language="java" import="java.util.Date,java.text.SimpleDateFormat" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <h1>这是tomcat1主页</h1> <% Date date=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strDate=sdf.format(date); out.println(strDate+"<br>"); %> <img src="1.png"> </body> </html> html页面能够自动发请求: img link script : js
2.在tomcat2上部署show.jsp文件
<%@ page language="java" import="java.util.Date,java.text.SimpleDateFormat" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <h1>这是tomcat2主页</h1> <% Date date=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strDate=sdf.format(date); out.println(strDate+"<br>"); %> <img src="images/aaa.jpg"> </body> </html>
3.在nginx上配置动静分离
upstream tomcat{ server 192.168.18.201:8081 weight=2; server 192.168.18.201:8082; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://tomcat; index index.html index.htm; } location ~\.(jsp|do|action)$ { proxy_pass http://tomcats; } location ~\.(html|css|js|gif|jpg|png|bmp|swf)$ { root /static;
nginx 默认使用的算法: 轮询
1、轮询法
将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
2、随机法
通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,
其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。
3、源地址哈希法
源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
4、加权轮询法
不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
5、加权随机法
与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。
6、最小连接数法
最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,它是根据后端服务器当前的连接情况,动态地选取其中当前
积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。