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
多次刷新



相关推荐
爬山虎还上班37 分钟前
nginx upstream转发连接错误情况研究
nginx·upstream
张3蜂10 小时前
Ubuntu系统安装mysql、nginx、.netcore
mysql·nginx·ubuntu
ps酷教程14 小时前
nginx架构篇(三)
nginx
芊言芊语14 小时前
弹性负载均衡ELB 详解和设置方法
运维·负载均衡
man201715 小时前
LNMP环境搭建、部署的整体流程和详细步骤
linux·mysql·nginx·php
petaexpress16 小时前
负载均衡服务由几部分组成?分别是什么
运维·负载均衡
谭舜心16 小时前
怎么让Nginx可以访问某一IP的每个后台controller接口
网络·tcp/ip·nginx
代码代码快快显灵16 小时前
TomCat乱码问题
服务器·ajax·tomcat
先生沉默先16 小时前
Unity webgl跨域问题 unity使用nginx设置跨域 ,修改请求头
运维·nginx·webgl
码农00016 小时前
nginx学习笔记
笔记·学习·nginx