目录
一、Tomcat与Nginx简介
1.1 Tomcat重要目录
bin: 存放启动Tomcat和关闭Tomcat脚本
conf:存放Tomcat不同的配置文件
doc:存放Tomcat文档
lib:存放Tomcat运行需要的库文件
logs:存放tomcat执行时的LOG 文件
src: 存在Tomcat的源代码
webapps:Tomcat的主要Web发布目录
work: 存放jsp编译后产生的class文件
1.2 Nginx
- Nginx是一款非常优秀的HTTP服务器软件
支持高达50 000 个并发连接数的响应
拥有强大的静态资源处理能力
运行稳定
内存、CPU等系统资源消耗非常低
目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载能力
1.3 Nginx实现负载均衡与动静分离原理
Nginx实现负载均衡是通过反向代理实现
- upstream 服务池名{} ## 配置后端服务器池,以提供响应数据
- proxy_pass http://服务池名 ## 配置将访问请求转发给后端服务器池的服务器处理
动静分离原理 - 服务器端接收客户的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源由Nginx转发至后端
1.4 Nginx动静分离处理优势
- Nginx处理静态页面的效率远高于Tomcat的处理能力
- 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
- Tomcat每秒的吞吐量0.6M,Nginx的每秒吞吐量为3.6M
- Nginx处理静态资源的能力是Tomcat处理的6倍
二、Nginx负载均衡、动静分离
- 准备工作
[root@nginx ~]# systemctl stop firewalld.service
[root@nginx ~]# setenforce 0
三台 CentOS 7虚拟机 一台 作为Nginx服务器,两台做Tomcat服务器
nginx: 192.168233.200
tomcat1:192.168.233.180
tomcat2:192.168.233.50
2.1 动静分离
2.1.1安装与优化Nginx服务
- 准备好Nginx安装包nginx-1.12.0.tar
[root@nginx ~]# useradd -s /sbin/nologin -M nginx
[root@nginx ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++ pcre make
[root@nginx ~]# tar zxvf nginx-1.12.0.tar.gz
[root@nginx ~]# cd nginx-1.12.0/
[root@nginx nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@nginx nginx-1.12.0]# make && make install
[root@nginx nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@nginx nginx-1.12.0]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20
# description:Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
~
[root@nginx nginx-1.12.0]# chmod +x /etc/init.d/nginx
[root@nginx nginx-1.12.0]# chkconfig --add nginx
[root@nginx nginx-1.12.0]# service nginx start
[root@nginx nginx-1.12.0]# netstat -atnp | grep "nginx"
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22591/nginx: master
2.1.2 Tomcat 部署
- 准备好jdk-8u91-linux-x64.tar apache-tomcat-8.5.16.tar 安装包
[root@tomcat1 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
[root@tomcat1 ~]# 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@tomcat1 ~]# source /etc/profile
[root@tomcat1 ~]# tar zxvf apache-tomcat-8.5.16.tar.gz -C /usr/local/
[root@tomcat1 ~]# cd /usr/local/
[root@tomcat1 local]# mv apache-tomcat-8.5.16/ tomcat
[root@tomcat1 local]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
[root@tomcat1 local]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
[root@tomcat1 local]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_91/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
2.1.3 动静分离的实现
- Nginx 服务器上操作
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
## 在server下 location / { 上面插入下列代码
location ~.*.jsp {
proxy_pass http://192.168.233.180:8080;
proxy_set_header Host $Host;
}
创建静态页面
[root@nginx ~]# vim /usr/local/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>静态页面</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family:Tahoma,Verdana,Arial,sans-serif;
}
</style>
</head>
<body>
<h1>静态页面</h1>
<p>这是个静态页面</p>
</body>
</html>
重启配置
[root@nginx ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx ~]# service nginx stop
[root@nginx ~]# service nginx start
- tomcat1 上操作
[root@tomcat1 ~]# mkdir /usr/local/tomcat/webapps/test
[root@tomcat1 test]# vim /usr/local/tomcat/webapps/test/index.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "HTTP://www.W3.org/TR/ html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>动态页面</title>
</head>
<body>
<div>动态页面</div>
</body>
</html>
~
[root@tomcat1 ~]# shutdown.sh
[root@tomcat1 ~]# startup.sh
2.1.4 nginx处理静态图片,Tomcat处理动态页面
- tomcat上操作
<body>
<div>动态页面</div><br><img src="jin.jpg">
</body>
- nginx操作
location ~.*\.(gif|jpg|jpeg|png|bmg|swf|css)$ {
root html;
expires 30d;
}
tomcat指路径,nginx放图片
[root@nginx ~]# mkdir /usr/local/nginx/html/test
[root@nginx ~]# cd /usr/local/nginx/html/test/ ## 注意 html文件名一定要是test 需要与tomcat那边的文件名对应
[root@nginx test]# ls
jin.jpg
[root@nginx ~]# service nginx restart
2.1.5 测试
访问 http:192.168.233.200/test/index.jsp
2.2 Nginx的负载均衡
tomcat 两台都要弄
——————加入测试页面
[root@tomcat2 ~]# mkdir -pv /web/webapp1
mkdir: 已创建目录 "/web"
mkdir: 已创建目录 "/web/webapp1"
[root@tomcat2 ~]# vim /web/webapp1/index.jsp ## 为了方便测试 两个tomcat页面内容写不一样的
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("Welcome Tomcat2 Web");%>
</body>
</html>
[root@tomcat2 ~]# vim /usr/local/tomcat/conf/server.xml
150 <Context docBase="/web/webapp1" path="" reloadable="false">
151 </Context>
152
## docBase : web应用的文档基准目录
reloadable: 设置监视“类”是否变化
path=""“设置默认"类"
[root@tomcat2 ~]# shutdown.sh ## 修改完重启服务
[root@tomcat2 ~]# startup.sh
- Nginx 修改
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
#gzip on;
upstream tomcat_server {
server 192.168.233.180:8080 weight=1;
server 192.168.233.50:8080 weight=1;
}
location / {
root html;
index index.html index.htm;
proxy_pass http://tomcat_server;
}
- 重启Nginx服务
[root@nginx ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx ~]# service nginx stop
[root@nginx ~]# service nginx start
2.2.1 测试
访问Nginx服务器地址 192.168.233.200