05 Nginx+Tomcat负载均衡、动静分离群集

5.1. 引言

在Web应用开发中,随着访问量的增加,单个服务器往往难以承受高并发请求,同时对于静态资源和动态资源的处理也需要进行分离以提高效率。Nginx因其强大的静态资源处理能力和高并发支持,常被用作反向代理和负载均衡器;而Tomcat则以其轻量级和强大的Servlet/JSP支持,成为处理动态请求的首选。本文将详细介绍如何搭建Nginx+Tomcat的负载均衡与动静分离群集。

5.2. 环境准备

5.2.1 主机与软件环境

本案例涉及三台服务器,分别用于部署Nginx和两台Tomcat实例。具体环境如下:

|------------|-------------------|----------------|-----------------------------|
| 主机名 | 操作系统 | IP地址 | 主要软件 |
| Nginx服务器 | CentOS 7.3 x86_64 | 192.168.10.101 | nginx-1.12.0.tar.gz |
| Tomcat服务器1 | CentOS 7.3 x86_64 | 192.168.10.102 | apache-tomcat-8.5.16.tar.gz |
| Tomcat服务器2 | CentOS 7.3 x86_64 | 192.168.10.103 | apache-tomcat-8.5.16.tar.gz |

5.2.2 前期准备

1. 关闭防火墙

:在所有服务器上关闭firewalld防火墙。

复制代码
[root@localhost ~]# systemctl stop firewalld 
 [root@localhost ~]# setenforce 0

2.安装JDK

:Tomcat运行需要JDK环境,确保所有Tomcat服务器上已安装JDK,并设置环境变量。

如未安装,可通过yum安装OpenJDK。

5.2.3. Tomcat部署

1 安装Tomcat

1.下载并解压Tomcat
bash 复制代码
[root@localhost ~]# tar xf apache-tomcat-8.5.16.tar.gz 
[root@localhost ~]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8
2.启动Tomcat
bash 复制代码
[root@localhost ~]# /usr/local/tomcat8/bin/startup.sh
3.验证Tomcat是否启动成功
bash 复制代码
通过浏览器访问http://:8080,查看Tomcat默认页面。

2 配置Tomcat

1.修改server.xml

在Tomcat的conf/server.xml文件中,可以修改端口号、定义虚拟主机等。

XML 复制代码
<Connector port="8080" protocol="HTTP/1.1"         
    connectionTimeout="20000"            
     redirectPort="8443" />   
     <Host name="localhost" appBase="webapps"  
           unpackWARs="true" autoDeploy="true">     
            <Context docBase="/web/webapp1" path="" reloadable="false">  
           </Context>  
       </Host>
2.创建Web应用目录

在/web/webapp1目录下创建JSP测试页面。

XML 复制代码
[root@localhost ~]# mkdir -pv /web/webapp1 
[root@localhost ~]# vim /web/webapp1/index.jsp

编辑index.jsp文件,添加JSP代码。

3.重启Tomcat
bash 复制代码
[root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat8/bin/startup.sh

3. Nginx配置

1.安装nginx
bash 复制代码
[root@localhost ~]# yum -y install pcre-devel zlib-devel gcc*
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# tar zxvf nginx-1.12.0.tar.gz 
[root@localhost ~]# cd nginx-1.12.0
[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@localhost nginx-1.12.0]# make && make install
[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
2:编辑测试网页文件
bash 复制代码
[root@localhost ~]# vim /usr/local/nginx/html/index.html <body> <h1>静态页面</h1> <p>这是个静态页面</p> </body>
3:添加图片
bash 复制代码
[root@nginx ~]# mkdir /usr/local/nginx/html/img //创建静态文件目录 
[root@nginx ~]# cp /root/logo.jpg /usr/local/nginx/html/img
4:修改主配置文件
bash 复制代码
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
(1)在http配置项中添加
bash 复制代码
upstream tomcat_server { server 192.168.10.102:8080 weight=1; server 192.168.10.103:8080 weight=1; }
(2)在server配置项中添加
XML 复制代码
charset utf-8;
location / {
       root   html;
       index  index.html index.htm;
}

location ~ .*\.jsp$ {
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Client-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://tomcat_server;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        root /usr/local/nginx/html/img;
        expires 30d;
}

5:启动nginx

XML 复制代码
[root@localhost ~]# nginx

6:修改tomcat的配置文件,并重启tomcat

XML 复制代码
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%a %r %t %{X-Real-IP}i" resolveHosts="false" />

6:测试

浏览器打开网站

(1)静态网站测试

http://192.168.10.101

(2)动态网站测试

http://192.168.10.101/index.jsp

相关推荐
程序员阿鹏6 小时前
责任链模式
java·spring·servlet·tomcat·maven·责任链模式
Knight_AL8 小时前
Docker 中的端口映射原理:为什么 Nginx 要 `listen 80`,而不是“随便写端口”
nginx·docker·容器
云老大TG:@yunlaoda3608 小时前
华为云国际站代理商NAT的高可用与弹性具体是如何实现的?
服务器·数据库·华为云·负载均衡
虹梦未来10 小时前
【运维心得】Ubuntu2404编译nginx隐藏Server信息
运维·服务器·nginx
计算机学姐13 小时前
基于php的非物质文化遗产推广系统
开发语言·vue.js·mysql·tomcat·php·postman
tgethe14 小时前
Nginx笔记
运维·笔记·nginx
计算机毕设指导614 小时前
基于微信小程序的派出所业务管理系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·uniapp
invicinble14 小时前
对于nginx(一,认识nginx)
运维·nginx
徒手千行代码无bug14 小时前
Nginx upstream 负载均衡 404,单节点转发正常的根因与解决
运维·nginx·负载均衡
没有bug.的程序员15 小时前
负载均衡的真正含义:从算法到架构的深度解析
java·jvm·算法·微服务·架构·负载均衡