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

相关推荐
CZZDg44 分钟前
LVS负载均衡-DR模式配置
运维·负载均衡·lvs
Otaku love travel3 小时前
老系统改造增加初始化,自动化数据源配置(tomcat+jsp+springmvc)
java·tomcat·初始化·动态数据源
晨岳4 小时前
CentOS 安装 JDK+ NGINX+ Tomcat + Redis + MySQL搭建项目环境
java·redis·mysql·nginx·centos·tomcat
执笔诉情殇〆4 小时前
前后端分离(java) 和 Nginx在服务器上的完整部署方案(redis、minio)
java·服务器·redis·nginx·minio
这儿有一堆花7 小时前
Nginx服务器集群:横向扩展与集群解决方案
运维·服务器·nginx
代码的余温16 小时前
MyBatis集成Logback日志全攻略
java·tomcat·mybatis·logback
怀揣小梦想21 小时前
微服务项目远程调用时的负载均衡是如何实现的?
微服务·架构·负载均衡
果子⌂1 天前
Docker-构建镜像并实现LNMP架构
mysql·nginx·docker·容器·架构·php
nightunderblackcat1 天前
新手向:实现ATM模拟系统
java·开发语言·spring boot·spring cloud·tomcat·maven·intellij-idea
XU磊2602 天前
手动实现 Tomcat 核心机制:打造属于自己的 Servlet 容器
java·servlet·tomcat