Nginx负载Tomcat

准备工作

下载

1
2
3
https://www.oracle.com/java/technologies/downloads/
http://tomcat.apache.org/
http://nginx.org/download/
  1. /usr 目录下新建一个 ftp 文件夹

    1
    mkdir /usr/ftp
  2. 把 nginx-1.15.10.tar.gz apache-tomcat-9.0.17.tar.gz jdk-8u181-linux-x64.tar.gz安装包上传到 ftp 目录下

  3. 这里为了后续方便 建议把防火墙关闭

防火墙

方式一:

  • 关闭防火墙
1
2
3
4
systemctl status firewalld        ====查看防火状态
systemctl stop firewalld ====暂时关闭防火墙
systemctl disable firewalld ====永久关闭防火墙
systemctl enable firewalld ====重启防火墙

方式二:

  • 配置防火墙规则
1
2
3
4
5
6
7
8
9
10
11
12
13
systemctl start firewalld					//启动  
systemctl status firewalld //查看状态
systemctl stop firewalld //停止
systemctl disable firewalld //禁用
systemctl enable firewalld.servic //开机自动启动
systemctl restart firewalld.service //重启
开启某个端口、服务 (--permanent永久生效,没有此参数重启后失效)
firewall-cmd --permanent --zone=public --add-port=80/tcp //永久开启80端口
firewall-cmd --zone=public --add-port=80/tcp //临时开启80端口
firewall-cmd --zone=public --add-service=https //临时
firewall-cmd --permanent --zone=public --add-service=https / /永久
firewall-cmd --zone=public --list-ports //查看开放的端口有哪些
firewall-cmd --reload //**重载** 修改配置文件后 使用命令重新加载 更新防火墙规则

Tomcat安装配置

JDK安装

解压

1
2
3
cd /usr/ftp
tar -zvxf jdk-8u181-linux-x64.tar.gz
mv jdk1.8.0_181 /usr/local

把环境变量追加入到 /etc/profile 下 配置

1
vi /etc/profile

把下方配置追加到 /etc/profile 尾部 注意JDK的实际路径

1
2
3
4
export JAVA_HOME=/usr/local/jdk1.8.0_181
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$CLASSPATH:.:$JRE_HOME/lib:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

然后重新配置 profile 使其变量生效

1
source /etc/profile

输入 java -version 出现如下就说明 JDK 已经配置成功了

Tomcat安装

解压

1
2
3
cd /usr/ftp
tar -zvxf apache-tomcat-9.0.17.tar.gz
mv apache-tomcat-9.0.17 /usr/local/tomcat1

把环境变量追加入到 /etc/profile 下 配置

1
vi /etc/profile

把下方配置追加到 /etc/profile 尾部 注意tomcat的实际路径

1
2
3
export CATALINA_BASE=/usr/local/tomcat1
export CATALINA_HOME=$CATALINA_BASE
export TOMCAT_HOME=$CATALINA_BASE

然后重新配置 profile 使其变量生效

1
source /etc/profile

启动 Tomcat
如果是在 tomcat 下的 bin 目录下就执行

1
sh startup.sh                   

在其他目录下执行

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

停止运行 同上

1
2
sh shutdown.sh									====bin目录下
sh /usr/local/tomcat1/bin/shutdown.sh ====其他目录下

Nginx安装配置

安装依赖

正式安装Nginx之前需要给操作系统下载好必要的依赖

yum install gcc gcc-c++ openssl automake autoconf make libtool pcre pcre-devel zlib openssl-devel zlib-devel

创建 Nginx 用户组

1
2
groupadd nginx   
useradd -m -s /sbin/nologin -g nginx nginx

安装编译

进入Nginx解压目录下 安装指定到 /usr/local/ 目录下的 nginx-1.15.10、编译

1
2
3
4
5
6
cd /usr/ftp
tar -zvxf nginx-1.15.10.tar.gz
mv nginx-1.15.10 /usr/local
cd /usr/local/nginx-1.15.10
./configure --prefix=/usr/local/nginx
make && make install

启动

超级管理员运行 Nginx

1
2
sudo /usr/local/nginx/sbin/nginx
sudo /usr/local/nginx/sbin/nginx -s reload ---重启
  • 如果报如下错误表示少了 logs 文件夹需要在 /usr/local/nginx-1.15.10 创建一个 logs 文件夹 然后再次执行启动命令

    1
    mkdir logs                           ###注意是在 /usr/local/nginx-1.15.10 目录下创建
  • 浏览器输入http://【虚拟机ip】:80 【nginx默认端口】 显示如下页面就表示安装成功了

  • 如果没有 则需要放行 80 端口 防火墙配置

  • 配置nginx

    1
    vi /usr/local/nginx/conf/nginx.conf
  • 端口号配置 默认端口 80

  • 集群配置

Nginx代理负载Tomcat

负载均衡
数以万计算 百万 千万的用户 同时访问同一台服务器,再好的性能也扛不住。
负载均衡就是 准备了很多台镜像服务器,但是由一个代理服务器帮助用户选择内容服务器。
代理 张三 和李四 都是菜贩 摊位挨着,李四上厕所了,让张三代理一下,有人来买李四的菜吗,拿 李四的 菜 收的钱放李四的盒子 找的钱从李四的盒子 (这些事都是张三代理)

Tomcat配置

复制多个 tomcat

1
2
3
cd /usr/local/
cp -r tomcat1 tomcat2
cp -r tomcat1 tomcat3

加入 tomcat2 tomcat3 的环境变量

1
2
3
4
5
6
7
8
9
10
vi /etc/profile
在 Tomcat1 下方添加 Tomcat2 Tomcat3
##### Tomcat2 #####
export CATALINA_BASE2=/usr/local/tomcat2
export CATALINA_HOME2=$CATALINA_BASE2
export TOMCAT_HOME2=$CATALINA_BASE2
##### Tomcat3 #####
export CATALINA_BASE3=/usr/local/tomcat3
export CATALINA_HOME3=$CATALINA_BASE3
export TOMCAT_HOME3=$CATALINA_BASE3

配置多个tomcat为什么需要在/etc/profile 修改多个 tomcat 设置

如果不配置,哪个tomcat先启动就认谁的,例如tomcat1设置为123,tomcat2设置为abc,1先启动显示123 ,2先启动就会显示abc

shutdown.sh有时候并不能关闭服务器

ps –ef|grep tomcat ==ps 查看 grep过滤 tomcat想在进程中查找的程序名

找到进程号 使用 kill -9 +进程号 让其停止运行
然后重新配置 profile 使其变量生效

1
source /etc/profile

修改 tomcat2 tomcat3 server.xml中的端口号
tomcat2 如下4处端口依次 +1

1
vi /usr/local/tomcat2/conf/server.xml
1
2
3
4
5
22 <Server port="8006" shutdown="SHUTDOWN">             8005>8006
69 <Connector port="8081" protocol="HTTP/1.1" 8080>8081
70 connectionTimeout="20000"
71 redirectPort="8443" />
116 <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" /> 8009>8010 8443>8444

tomcat3

1
vi /usr/local/tomcat3/conf/server.xml
1
2
3
4
5
22 <Server port="8007" shutdown="SHUTDOWN">             8005>8007
69 <Connector port="8082" protocol="HTTP/1.1" 8080>8082
70 connectionTimeout="20000"
71 redirectPort="8443" />
116 <Connector port="8011" protocol="AJP/1.3" redirectPort="8445" /> 8009>8011 8443>8445

启动 tomcat2 tomcat3

1
2
sh /usr/local/tomcat2/bin/startup.sh
sh /usr/local/tomcat3/bin/startup.sh

注意对应关系

如何理解,在没有配置tomcat特殊的系统变量的情况下

  1. 先启动tomcat1,再启动tomcat2 ,查看只有tomcat1,如果先启动tomcat2,再启动tomcat 只有 tomcat2(谁先启动,谁的路径就注册成了临时的系统路径)

  2. 明明tomcat2在执行,执行tomcat1的关闭脚本sh,结果tomcat2被关了

再理解 ,配置profile(系统环境设置)之后,每个tomcat的catalina.sh就不找别人的路径了原因就是因为他找到 了路径

Nginx配置

找到 Server 修改端口

1
2
3
4
5
6
7
8
9
41     server {
42 listen 9090; ###修改默认端口80>9090,也可以不修改
43 server_name localhost;
#集群配置
35 upstream tomcats {
36 server 192.168.139.123:8080 weight=1;#服务器集群,weight 权重
37 server 192.168.139.123:8081 weight=1;
38 server 192.168.139.123:8082 weight=1;
39 }

修改配置文件后
在 Server 中的 location /中添加 proxy_pass http://tomcats; tomcats 和前面的 upstream 的名字相同 配置完效果如下

1
2
3
4
5
6
7
8
9
location / {
#root html;
#index index.html index.htm;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcats;
}

找到在每个tomcat的 webapp文件夹下的ROOT文件夹 新建1.txt文件,并添加上文字

1
2
3
echo tomcat1 > /usr/local/tomcat1/webapps/ROOT/1.txt
echo tomcat2 > /usr/local/tomcat2/webapps/ROOT/1.txt
echo tomcat3 > /usr/local/tomcat3/webapps/ROOT/1.txt

然后进入浏览器在,浏览器中使用 http://虚拟机IP:修改的Nginx端口/1.txt 例如 http://192.168.139.123:9090/1.txt

到这里就基本实现了 Nginx 负载多个 Tomcat


Nginx负载Tomcat
https://yftxhy.site/2022/11/14/Nginx负载Tomcat/
作者
Taozi
发布于
2022年11月14日
许可协议