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

Nginx+Tomcat 负载均衡、动静分离群集是一种经典的 Web 架构,通过 Nginx 处理静态资源(HTML、CSS、JS、图片等)和反向代理请求到后端多个 Tomcat 服务器,实现负载均衡和高可用。

  1. 动静分离
    静态资源:由 Nginx 直接处理,不经过 Tomcat,提高响应速度。
    动态资源:JSP、Servlet 等由 Tomcat 处理,Nginx 将动态请求转发到 Tomcat 服务器。
  2. 负载均衡
    Nginx 作为前端反向代理,根据配置的负载均衡算法(如轮询、加权轮询)将请求分发到多个 Tomcat 节点,避免单点故障,提升系统并发能力。

准备三台虚拟机

Nginx 192.168.10.101
Tomcat:192.168.10.102
Tomcat2:192.168.10.103
一:tomcat安装(在192.168.10.102和192.168.10.103)

1:关闭防火墙

[root ~]# systemctl stop firewalld
[root ~]# setenforce 0

2:安装java环境

[root ~]# yum -y install java
[root ~]# java -version

3:安装tomcat

[root ~]# tar zxvf apache-tomcat-9.0.8.tar.gz 
[root ~]# mv apache-tomcat-9.0.8 /usr/local/tomcat8

4:启动tomcat

[root ~]# /usr/local/tomcat8/bin/startup.sh
[root ~]# netstat -anpt | grep java

5:创建测试网页

[root ~]# mkdir -p /web/webapp1
[root ~]# vim /web/webapp1/index.jsp
wo shi ancheche1

6:修改tomcat主配置文件

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">        //148行后边插入
        <Context docBase="/web/webapp1" path="" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>

7:重启tomcat

[root ~]# /usr/local/tomcat8/bin/shutdown.sh 
[root ~]# /usr/local/tomcat8/bin/startup.sh 

8:客户端访问测试
http://192.168.10.102:8080
在这里插入图片描述
二:nginx配置(在192.168.10.101)
1:安装nginx

[root ~]# yum -y install pcre-devel zlib-devel gcc*
[root ~]# useradd -M -s /sbin/nologin nginx
[root ~]# tar zxvf nginx-1.12.0.tar.gz 
[root ~]# cd nginx-1.12.0
[root nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root nginx-1.12.0]# make && make install
设置环境变量
[root nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

2:编辑测试网页文件

[root ~]# vim /usr/local/nginx/html/index.html 
<html>
<head>
</head>
<body> 
<h1>静态页面</h1> 
<p>这是个静态页面</p> 
</body>
</html>

4:修改主配置文件

[root ~]# vim /usr/local/nginx/conf/nginx.conf   
(1)在http配置项中添加
upstream tomcat_server {
        server 192.168.10.102:8080 weight=2;   权重
        server 192.168.10.103:8080 weight=1;
}

(2)在server配置项中添加

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;
}

备注:
proxy_set_header HOST $host;
把原http请求中的Header中的Host字段放到转发的请求报文里,后端的web服务器利用这个host判断请求的是哪个虚拟主机
proxy_set_header X-Real-IP remoteaddr;使用remote_addr; 使用remoteaddr;使用remote_addr变量获得用户的真实ip,$remote_addr一般都是设置第一个代理上面。当一个请求通过多个代理服务器时,用户的IP将会被代理服务器IP覆盖
proxy_set_header Client-IP $remote_addr;
获取客户端ip地址

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
从客户的真实ip为起点,穿过多层级的proxy ,最终到达web 服务器,都会记录下来。所以在获取用户真实ip的时候,最后一个nginx配置此变量,用来获取客户端的ip地址

5:启动nginx

[root ~]# nginx

6:测试
浏览器打开网站
(1)静态网站测试
http://192.168.10.101

(2)动态网站测试
http://192.168.10.101/index.jsp

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐