nginx负载均衡和动静分离

一、Tomcat简介

最初是由Sun的软件构架师詹姆斯·邓肯·戴维森开发

安装Tomcat后,安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件

Tomcat重要目录

bin:存放启动和关闭Tomcat脚本
conf:存放Tomcat不同的配置文件
doc:存放Tomcat文档
lib:存放Tomcat运行需要的库文件
logs:存放Tomcat执行时的LOG文件
src:存放Tomcat的源代码
webapps:Tomcat的主要Web发布目录
work:存放jsp编译后产生的class文件

Nginx应用

Nginx是一款非常优秀的HTTP服务器软件
支持高达50000个并发连接数的响应
拥有强大的静态资源处理能力
运行稳定
内存、CPU等系统资源消耗非常低
目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力

二、Nginx负载均衡原理

Nginx实现负载均衡是通过反向代理实现

反向代理原理

Nginx配置反向代理的主要参数

  • upstream 服务池名{ }
    配置后端服务器池,以提供响应数据
  • proxy_pass http://服务池名
    配置将访问请求转发给后端服务器池的服务器处理

三、Nginx动静分离原理

动静分离原理

服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发
至后端

Nginx静态处理优势

Nginx处理静态页面的效率远高于Tomcat的处理能力
若Tomcat的请求量为1000次,则Nginx的请求量为6000次
Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
Nginx处理静态资源的能力是Tomcat处理的6倍

四、部署Tomcat

负载均衡器:nginx–192.168.80.10

应用服务器1:tomcat1–192.168.80.70:8080

应用服务器2:tomcat2–192.168.80.80:8080

​ tomcat3–192.168.80.80:8081

mysql数据库:192.168.80.50

nginx负载均衡和动静分离_第1张图片

要求部署两台后端Tomcat服务器

为了进行测试,搭建两个内容不同的网站

Tomcat部署与网站搭建步骤

Tomcat部署应用服务器1

关闭firewalId防火墙

[root@70 ~]# systemctl stop firewalld
[root@70 ~]# setenforce 0
setenforce: SELinux is disabled

安装JDK,配置JAVA环境

[root@70 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
[root@70 ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

[root@70 ~]# source /etc/profile

安装配置Tomcat1

[root@70 ~]# cd /opt
[root@70 opt]# tar zxvf apache-tomcat-9.0.16.tar.gz
[root@70 opt]# mv /opt/apache-tomcat-9.0.16/ /usr/local/tomcat
[root@70 opt]# /usr/local/tomcat/bin/shutdown.sh 
[root@70 opt]# /usr/local/tomcat/bin/startup.sh

创建/tomcat/webapp目录,修改server.xml,将网站文件目录更改到/tomcat/webapp/路径下

[root@70 opt]# mkdir /usr/local/tomcat/webapps/test

/tomcat/webapp/下建立测试页面index.jsp,并进行测试

[root@70 opt]# vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test1 page   #指定为 test1 页面


<% out.println("动态页面 1,http://www.test1.com");%>


[root@70 opt]# vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置

	
	

[root@70 opt]# /usr/local/tomcat/bin/shutdown.sh 
[root@70 opt]# /usr/local/tomcat/bin/startup.sh
Tomcat部署应用服务器2

关闭firewalId防火墙

[root@80 ~]# systemctl stop firewalld
[root@80 ~]# setenforce 0
setenforce: SELinux is disabled

安装JDK,配置JAVA环境

[root@80 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
[root@80 ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

[root@80 ~]# source /etc/profile
tomcat安装
[root@80 opt]# tar zxvf apache-tomcat-9.0.16.tar.gz
[root@80 opt]# mkdir /usr/local/tomcat
[root@80 opt]# mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
[root@80 opt]# cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

配置 tomcat 环境变量

[root@80 opt]# vim /etc/profile.d/tomcat.sh

nginx负载均衡和动静分离_第2张图片

[root@80 opt]# source /etc/profile.d/tomcat.sh

修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号

[root@80 opt]# vim /usr/local/tomcat/tomcat2/conf/server.xml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量

[root@80 opt]# vim /usr/local/tomcat/tomcat1/bin/startup.sh 

[root@80 opt]# vim /usr/local/tomcat/tomcat1/bin/shutdown.sh

nginx负载均衡和动静分离_第3张图片
nginx负载均衡和动静分离_第4张图片

[root@80 opt]# vim /usr/local/tomcat/tomcat2/bin/startup.sh 
[root@80 opt]# vim /usr/local/tomcat/tomcat2/bin/shutdown.sh

nginx负载均衡和动静分离_第5张图片
nginx负载均衡和动静分离_第6张图片

启动各 tomcat 中的 /bin/startup.sh

[root@80 opt]# /usr/local/tomcat/tomcat1/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat/tomcat1
Using CATALINA_HOME:   /usr/local/tomcat/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat1/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/tomcat1/bin/bootstrap.jar:/usr/local/tomcat/tomcat1/bin/tomcat-juli.jar
Tomcat started.
[root@80 opt]# /usr/local/tomcat/tomcat2/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat/tomcat2
Using CATALINA_HOME:   /usr/local/tomcat/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat2/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/tomcat2/bin/bootstrap.jar:/usr/local/tomcat/tomcat2/bin/tomcat-juli.jar
Tomcat started.
[root@80 opt]# netstat -anpt |grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      57351/java          
tcp6       0      0 127.0.0.1:8006          :::*                    LISTEN      57410/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      57351/java          
tcp6       0      0 :::8010                 :::*                    LISTEN      57410/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      57351/java          
tcp6       0      0 :::8081                 :::*                    LISTEN      57410/java          

Tomcat1和Tomcat2 server 配置

创建/tomcat1/webapp目录,修改server.xml,将网站文件目录更改到/tomcat1/webapp/路径下

[root@80 opt]# mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test

/tomcat1/webapp/下建立测试页面index.jsp,并进行测试

[root@80 opt]# vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test1 page   


<% out.println("动态页面 1,http://www.test1.com");%>


[root@80 opt]# vim /usr/local/tomcat/tomcat1/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置

	
	

[root@80 opt]# /usr/local/tomcat/tomcat1/bin/shutdown.sh 
[root@80 opt]# /usr/local/tomcat/tomcat1/bin/startup.sh

/tomcat2/webapp/下建立测试页面index.jsp,并进行测试

[root@80 opt]# vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test1 page   


<% out.println("动态页面 2,http://www.test2.com");%>


[root@80 opt]# vim /usr/local/tomcat/tomcat2/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置

	
	

[root@80 opt]# /usr/local/tomcat/tomcat2/bin/shutdown.sh 
[root@80 opt]# /usr/local/tomcat/tomcat2/bin/startup.sh

五、部署Nginx 负载均衡器

[root@ux ~]# systemctl stop firewalld
[root@ux ~]# setenforce 0
setenforce: SELinux is disabled
[root@ux ~]# yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
[root@ux ~]# useradd -M -s /sbin/nologin nginx
[root@ux ~]# cd /opt
[root@ux opt]# tar zxvf nginx-1.12.2.tar.gz -C /opt/
[root@ux opt]# cd nginx-1.12.2/
[root@ux opt]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-file-aio \                          #启用文件修改支持
> --with-http_stub_status_module \           #启用状态统计
> --with-http_gzip_static_module \			 #启用 gzip静态压缩
> --with-http_flv_module \					 #启用 flv模块,提供对 flv 视频的伪流支持
> --with-http_ssl_module \					 #启用 SSL模块,提供SSL加密功能
> --with-stream								 #启用 stream模块,提供4层调度
[root@ux opt]# make && make install
[root@ux opt]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@ux opt]# vim /lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

[root@ux opt]# chmod 754 /lib/systemd/system/nginx.service
[root@ux opt]# systemctl start nginx.service
[root@ux opt]# systemctl enable nginx.service

六、配置Nginx动静分离

Nginx server 配置

[root@ux opt]# echo '

这是静态页面

' > /usr/local/nginx/html/index.html [root@ux opt]# mkdir /usr/local/nginx/html/img [root@ux opt]# cp /root/game.jpg /usr/local/nginx/html/img [root@ux opt]# vim /usr/local/nginx/conf/nginx.conf ...... http { ...... #gzip on; #配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大 upstream tomcat_server { server 192.168.80.70:8080 weight=1; server 192.168.80.80:8080 weight=1; server 192.168.80.80:8081 weight=1; } server { listen 80; server_name www.kgc.com; charset utf-8; #access_log logs/host.access.log main; #配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理 location ~ .*\.jsp$ { proxy_pass http://tomcat_server; #设置后端的Web服务器可以获取远程客户端的真实IP ##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。 proxy_set_header HOST $host; ##把$remote_addr赋值给X-Real-IP,来获取源IP proxy_set_header X-Real-IP $remote_addr; ##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #配置Nginx处理静态图片请求 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ { root /usr/local/nginx/html/img; expires 10d; } location / { root html; index index.html index.htm; } ...... } ...... }

测试效果

测试静态页面效果

浏览器访问 http://192.168.80.10/

nginx负载均衡和动静分离_第7张图片

浏览器访问 http://192.168.80.10/game.jpg

测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.80.10/index.jsp
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(nginx,负载均衡,服务器)