Nginx反向代理联动Tomcat实现多实例部署、动静分离、负载均衡

文章目录

  • [1. 配置反向代理](#1. 配置反向代理)
    • [1.1 前置准备](#1.1 前置准备)
    • [1.2 代理服务器配置](#1.2 代理服务器配置)
    • [1.3 真实服务器配置](#1.3 真实服务器配置)
    • [1.4 客户机配置](#1.4 客户机配置)
  • [2. Tomcat 多实例部署](#2. Tomcat 多实例部署)
    • [2.1 部署JDK](#2.1 部署JDK)
    • [2.2 设置JDK环境变量](#2.2 设置JDK环境变量)
    • [2.3 部署Tomcat服务](#2.3 部署Tomcat服务)
    • [2.4 路径启动](#2.4 路径启动)
  • [3. Nginx联动Tomcat实现动静分离、负载均衡](#3. Nginx联动Tomcat实现动静分离、负载均衡)
    • [3.1 基本原理](#3.1 基本原理)
    • [3.2 前置准备](#3.2 前置准备)
    • [3.3 配置nginx1实现四层代理,负载均衡](#3.3 配置nginx1实现四层代理,负载均衡)
    • [3.4 配置nginx2\3实现七层代理,动静分离](#3.4 配置nginx2\3实现七层代理,动静分离)
    • [3.5 Tomcat配置,作为动态资源服务器](#3.5 Tomcat配置,作为动态资源服务器)
    • [3.6 测试](#3.6 测试)

1. 配置反向代理

1.1 前置准备

bash 复制代码
#所需环境
192.168.67.100 #nginx代理服务器
192.168.67.101 #客户机
192.168.67.102 #真实服务器

1.2 代理服务器配置

bash 复制代码
vim /apps/nginx/conf/nginx.conf
#编辑主配置文件

#在http块中添加
include        /apps/nginx/conf.d/*.conf
bash 复制代码
vim /apps/nginx/conf.d/pc.com
#编辑子配置文件

server{
        listen 192.168.67.100:80;
        server_name www.pc.com;
     location / {
        root  /apps/nginx/html/pc;
       proxy_pass http://192.168.67.102;
    }
}

nginx -t
nginx -s reload
#重新加载

1.3 真实服务器配置

bash 复制代码
systemctl stop firewalld
setenforce 0 
#关闭防火墙和selinux
bash 复制代码
yum  install   httpd  -y #安装服务

cd  /var/www/html
echo   "Hi~"  > index.html #主页内容

systemctl start httpd #开启服务
bash 复制代码
vi /etc/hosts
#添加地址映射

192.168.67.100 www.pc.com

1.4 客户机配置

bash 复制代码
vim  /etc/hosts

192.168.67.100  www.pc.com

测试

客户机访问代理服务器

bash 复制代码
curl www.pc.com

2. Tomcat 多实例部署

2.1 部署JDK

bash 复制代码
#所需安装包
apache-tomcat-9.0.16.tar.gz  
jdk-8u201-linux-x64.rpm

rpm -ivh jdk-8u201-linux-x64.rpm  

2.2 设置JDK环境变量

bash 复制代码
#查看全局配置文件
vim /etc/profile
bash 复制代码
vi /etc/profile.d/java.sh


export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64   
#java家目录
export JRE_HOME=$JAVA_HOME/jre
#jre家目录
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
#指向java工具包和环境包
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#java环境变量
bash 复制代码
source /etc/profile.d/java.sh
#调用Java脚本

java -version
#查看当前JDK版本

2.3 部署Tomcat服务

bash 复制代码
cd /opt
tar xf apache-tomcat-9.0.16.tar.gz

#解压tomcat源码包
bash 复制代码
cp -r apache-tomcat-9.0.16/ /usr/local/tomcat1
cp -r apache-tomcat-9.0.16/ /usr/local/tomcat2
cp -r apache-tomcat-9.0.16/ /usr/local/tomcat3
#将tomcat复制到usr/local ,并且改名,方便管理
bash 复制代码
#更改tomcat1、2、3 server.xhl文件
vi /usr/local/tomcat1/conf/server.xml



重复操作

bash 复制代码
#修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
bash 复制代码
#tomcat1
vi /usr/local/tomcat1/bin/startup.sh 

#添加
export CATALINA_BASE=/usr/local/tomcat1
export CATALINA_HOME=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1
bash 复制代码
vi /usr/local/tomcat1/bin/shutdown.sh

#添加内容
export CATALINA_BASE=/usr/local/tomcat1
export CATALINA_HOME=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1


重复上述操作

2.4 路径启动

bash 复制代码
#绝对路径启动
 /usr/local/tomcat1/bin/startup.sh
 /usr/local/tomcat2/bin/startup.sh
 /usr/local/tomcat3/bin/startup.sh
ss -natp |grep java
#查看进程
bash 复制代码
#网页启动
192.168.67.102:8081
192.168.67.102:8082
192.168.67.102:8083



3. Nginx联动Tomcat实现动静分离、负载均衡

3.1 基本原理

服务端接收来自客户端的请求中,包含静态资源和动态资源,静态资源由Nginx进行处理,动态资源Nginx转发至后端由tomcat负责处理。

3.2 前置准备

bash 复制代码
#tomcat多实例
192.168.67.102:8081
192.168.67.102:8082
192.168.67.102:8083

#四层实现负载均衡
nginx1 192.168.67.100 #用性能最好的一台

#七层实现动静分离
nginx2 192.168.67.101
nginx3 192.168.67.103

#客户机
192.168.67.104

3.3 配置nginx1实现四层代理,负载均衡

bash 复制代码
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux策略
bash 复制代码
#编译安装nginx并加入systemd服务
#依赖
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#创建管理用户
useradd -M -s /sbin/nologin nginx
bash 复制代码
#编译安装ngnix
cd /opt

#解压缩软件包
tar -zxf nginx-1.18.0.tar.gz

cd nginx-1.18.0
#加入源码包

#搭建编译环境
./configure \
--prefix=/apps/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层调度

make -j2 && make install
#编译并安装 

#软连接 添加到环境变量中
ln -s /apps/nginx/sbin/nginx /usr/local/
bash 复制代码
#添加到系统服务中
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

systemctl daemon_reload
chmod 754 /lib/systemd/system/nginx.service

#启动nginx
systemctl start nginx
systemctl status nginx
#查看运行状态 
bash 复制代码
#配置负载均衡
vim /apps/nginx/conf/nginx.conf
...
#写在http部分上面
stream {
	
    upstream myserver {
		server 192.168.67.101:80 weight=1;
		server 192.168.67.103:80 weight=1;
    }
    server {
        listen 80;
        proxy_pass myserver;
    }
}

nginx -t
nginx -s reload 
#重新加载



bash 复制代码
ss -natp |grep nginx
#查看是否正常运行

3.4 配置nginx2\3实现七层代理,动静分离

nginx2和3配置基本相同,主页文件相同名字,不同内容的文本和静态网页,用于测试负载均衡

bash 复制代码
#前置准备
systemctl disable firewalld --now
setenforce 0

#yum安装nginx
yum -y install epel-release.noarch -y
yum -y install nginx 

#如果开启了httpd服务关了,不然会导致nginx无法开启

#开启服务
systemctl start nginx 
bash 复制代码
vim /etc/nginx/nginx.conf
#编辑主配置文件
bash 复制代码
#添加并编辑子配置文件
touch conf.d/scj.conf
vim conf.d/scj.conf
bash 复制代码
nginx -t
nginx -s reload
#重新加载
bash 复制代码
#静态页面
cd /usr/share/nginx/html
mkdir scj
echo "This is nginx2 ,from scj" > scj/index.html


3.5 Tomcat配置,作为动态资源服务器

bash 复制代码
#前置准备
systemctl stop firerwalld
setenforce 0

#当前已经部署了tomcat多实例
#详情见上
bash 复制代码
#准备动态资源
mkdir /usr/local/tomcat1/webapps/test
mkdir /usr/local/tomcat2/webapps/test
mkdir /usr/local/tomcat3/webapps/test
#创建动态资源根目录
bash 复制代码
#创建动态页面

#tomcat1
vi /usr/local/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>

#创建动态页面

#tomcat2
vi /usr/local/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>   
</head>
<body>
<% out.println("动态页面 2,http://www.test1.com");%>
</body>
</html>

#tomcat3
vi /usr/local/tomcat3/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3 page</title>   
</head>
<body>
<% out.println("动态页面 3,http://www.test1.com");%>
</body>
</html>
bash 复制代码
#重启服务

/usr/local/tomcat1/bin/shutdown.sh 
/usr/local/tomcat1/bin/startup.sh 

/usr/local/tomcat2/bin/shutdown.sh 
/usr/local/tomcat2/bin/startup.sh 

/usr/local/tomcat3/bin/shutdown.sh 
/usr/local/tomcat3/bin/startup.sh 

ss -natp |grep java
#查看运行情况

3.6 测试

bash 复制代码
#访问静态资源
浏览器访问 http://192.168.67.100/scj/index.html
多次刷新


bash 复制代码
#访问动态资源
http://192.168.67.100/test/index.jsp
多次刷新



相关推荐
Wx-bishekaifayuan3 小时前
基于微信小程序的社区图书共享平台设计与实现 计算机毕业设计源码44991
javascript·vue.js·windows·mysql·pycharm·tomcat·php
小咕聊编程3 小时前
【含文档+PPT+源码】基于SpringBoot+Gpt个人健康管理系统
java·gpt·tomcat·毕业设计·hibernate
2301_787328495 小时前
25.负载均衡-Nginx、HAProxy、LVS 全解析
nginx·负载均衡·lvs
siriuuus5 小时前
Nginx 负载均衡调度算法
运维·nginx·负载均衡
川石课堂软件测试8 小时前
全链路Controller压测负载均衡
android·运维·开发语言·python·mysql·adb·负载均衡
tjsoft13 小时前
设置 windows nginx.exe 每天 重启
运维·windows·nginx
舰长11514 小时前
nginx 负载均衡配置
运维·nginx·负载均衡
222you1 天前
Mybatis(1)
java·tomcat·mybatis
foundbug9991 天前
查看nginx日志文件
linux·nginx·github
失因1 天前
Docker 镜像结构与 Dockerfile 案例
运维·docker·云原生·容器·tomcat