Nginx反向代理与负载均衡部署

发布于:2025-09-10 ⋅ 阅读:(21) ⋅ 点赞:(0)

前言

  在现代Web架构中,高可用性高性能是企业应用的核心需求。随着用户量和业务量的增长,单台服务器往往难以承受高并发请求,容易成为性能瓶颈。此时,反向代理负载均衡技术成为解决问题的关键——通过将请求分发到多台后端服务器,既能提升系统的整体处理能力,又能隐藏后端服务器的真实IP,增强安全性。本教程将详细介绍如何使用Nginx搭建反向代理与负载均衡集群,结合Tomcat实现动静分离,为企业应用打造稳定、高效的Web服务环境。

一、规划部署负载均衡和反向代理

在开始部署前,需明确各服务器的角色与IP地址,确保网络环境畅通:

  • Nginx负载均衡器:作为前端入口,负责接收客户端请求并将请求分发到后端Tomcat服务器,IP地址为192.168.10.10,监听端口80
  • Tomcat应用服务器1:运行Java Web应用,IP地址为192.168.10.11,监听端口8080
  • Tomcat应用服务器2:运行Java Web应用,IP地址为192.168.10.11,监听端口8081(同一服务器部署多实例,模拟多台服务器场景)。
    通过这种架构,Nginx作为“流量调度中心”,将客户端请求均匀分发到后端Tomcat服务器,既提升了系统的并发处理能力,又降低了单台服务器的压力。

二、部署Nginx负载均衡器

Nginx的安装与配置是搭建反向代理集群的第一步。以下是详细步骤:

2.1. 准备基础环境

首先关闭防火墙和SELinux,避免网络访问限制:

systemctl stop firewalld
setenforce 0

安装Nginx所需的依赖包(用于编译安装):

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

2.2. 创建Nginx运行用户

为保证安全性,Nginx以非root用户身份运行:

useradd -M -s /sbin/nologin nginx

2.3. 编译安装Nginx

下载并解压Nginx源码包(以1.20.2版本为例):

cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/

进入解压目录,配置编译选项:

cd /opt/nginx-1.20.2/
./configure \
--prefix=/usr/local/nginx \          # 安装目录
--user=nginx \                       # 运行用户
--group=nginx \                      # 运行组
--with-file-aio \                    # 启用文件异步IO(提升静态文件处理性能)
--with-http_stub_status_module \     # 启用状态统计模块(查看Nginx运行状态)
--with-http_gzip_static_module \     # 启用gzip静态压缩(减少传输体积)
--with-http_flv_module \             # 启用FLV视频伪流支持
--with-http_ssl_module \             # 启用SSL模块(支持HTTPS)
--with-stream \                      # 启用stream模块(支持四层负载均衡)
make && make install                 # 编译并安装

2.4. 配置Nginx系统服务

为了让Nginx随系统启动自动运行,需创建systemd服务文件:

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
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

设置服务权限并启动Nginx:

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service         # 设置开机自启

2.5. 验证Nginx安装

在浏览器中访问http://192.168.10.10,若出现Nginx欢迎页面,说明安装成功。

三、部署后端2台Tomcat应用服务器

Tomcat作为Java Web应用服务器,需部署两个实例以实现负载均衡的目标。以下是详细步骤:

3.1. 安装JDK

Tomcat依赖JDK运行,首先安装JDK 8:

tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/

配置JDK环境变量:

vim /etc/profile

添加以下内容:

export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

使环境变量生效:

source /etc/profile

3.2. 部署Tomcat实例1

解压Tomcat源码包:

tar zxvf apache-tomcat-8.5.16.tar.gz

移动到指定目录并重命名:

mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat

启动Tomcat并验证端口:

/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 
netstat -ntap | grep 8080              # 检查8080端口是否监听

3.3. 部署Tomcat实例2

复制Tomcat实例1的目录,创建第二个实例:

cp -r /usr/local/tomcat /usr/local/tomcat1

修改Tomcat实例2的端口(避免与实例1冲突):
编辑/usr/local/tomcat1/conf/server.xml,修改以下端口:

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<Server port="8006" shutdown="SHUTDOWN" />

启动Tomcat实例2并验证端口:

/usr/local/tomcat/tomcat1/bin/shutdown.sh 
/usr/local/tomcat/tomcat1/bin/startup.sh 
netstat -ntap | grep 8081              # 检查8081端口是否监听

四、动静分离配置

  动静分离是提升Web性能的关键策略,通过将静态资源(如HTML、CSS、JS、图片)与动态资源(如JSP、Servlet)分开处理,减少Tomcat的负载压力。以下是具体配置:

4.1. 配置Tomcat1的动态页面

创建动态页面目录并编写JSP文件:

mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp

添加以下内容(显示动态页面1的信息):

<%@ 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>

修改Tomcat1的server.xml,配置虚拟主机:

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
</Host>

重启Tomcat1:

/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 

4.2. 配置Tomcat2的动态页面

复制Tomcat1的动态页面目录,修改内容(当前tomcat为同一服务器):

mkdir /usr/local/tomcat/tomcat1/webapps/test
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp

添加以下内容(显示动态页面2的信息):

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>

修改Tomcat2的server.xml,配置虚拟主机:

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat1/webapps/test" path="" reloadable="true" />
</Host>

重启Tomcat2:

/usr/local/tomcat/tomcat1/bin/shutdown.sh 
/usr/local/tomcat/tomcat1/bin/startup.sh 

4.3. 配置Nginx的动静分离

编辑Nginx的主配置文件:

vim /usr/local/nginx/conf/nginx.conf

http块中添加upstream(负载均衡服务器池)和动静分离配置:

http {
    # 定义负载均衡服务器池(权重可根据服务器性能调整)
    upstream tomcat_server {
        server 192.168.10.11:8080 weight=1;
        server 192.168.10.11:8081 weight=1;
    }
    server {
        listen 80;
        server_name www.kgc.com;
        charset utf-8;
        # 动态请求转发到Tomcat集群 {~ .*\,jsp$(匹配大小写)|~*\.jsp$(不匹配大小写)}
        location ~ .*\.jsp$ {
            proxy_pass http://tomcat_server;
            proxy_set_header Host $host;               # 传递客户端请求的Host头
            proxy_set_header X-Real-IP $remote_addr;   # 传递客户端真实IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链IP
        }

        # 静态图片请求(直接由Nginx处理,提升性能)
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
            root /usr/local/nginx/html/img;
            expires 10d;                               # 设置静态资源缓存时间(10天)
        }
        # 静态页面请求
        location / {
            root html;
            index index.html index.htm;
        }
    }
}

检查Nginx配置语法并重启:

/usr/local/nginx/sbin/nginx -t         # 检查配置是否正确
systemctl restart nginx.service        # 重启Nginx

五、测试效果

5.1. 测试静态页面

  在浏览器中访问http://192.168.10.10/,若显示Nginx的默认静态页面,说明静态页面配置成功。
在这里插入图片描述

5.2. 测试静态图片

  将图片1.png复制到/usr/local/nginx/html/img目录,访问http://192.168.10.10/1.png,若显示图片,说明静态图片配置成功。
在这里插入图片描述

5.3. 测试负载均衡

  在浏览器中反复访问http://192.168.10.11/index.jsp,若交替显示“动态页面 1”和“动态页面 2”的内容,说明负载均衡配置成功(Nginx将请求分发到Tomcat1和Tomcat2)。
在这里插入图片描述
在这里插入图片描述

结语

  通过本教程的部署,我们成功搭建了Nginx反向代理与负载均衡集群,并结合Tomcat实现了动静分离。这种架构不仅提升了Web应用的并发处理能力(Nginx处理静态请求,Tomcat处理动态请求),还通过负载均衡将请求分发到多台服务器,降低了单台服务器的压力,增强了系统的高可用性
  在实际生产环境中,还可以进一步优化配置:如开启Nginx的gzip压缩(减少传输体积)、配置SSL证书(实现HTTPS加密)、设置健康检查(自动剔除故障服务器)等。此外,结合Docker或Kubernetes等容器技术,可以实现更灵活的动态扩展,应对突发的流量高峰。
  反向代理与负载均衡是企业Web架构的核心组件,掌握其部署与配置技能,将为打造高性能、高可用的Web服务奠定坚实基础。


网站公告

今日签到

点亮在社区的每一天
去签到