当前位置: 首页 > news >正文

实用指南:Nginx反向代理与负载均衡部署

实用指南:Nginx反向代理与负载均衡部署

Nginx反向代理与负载均衡部署实战指南

  • 前言
  • 一、规划部署负载均衡和反向代理
  • 二、部署Nginx负载均衡器
      • 2.1. 准备基础环境
      • 2.2. 创建Nginx运行用户
      • 2.3. 编译安装Nginx
      • 2.4. 配置Nginx系统服务
      • 2.5. 验证Nginx安装
  • 三、部署后端2台Tomcat应用服务器
      • 3.1. 安装JDK
      • 3.2. 部署Tomcat实例1
      • 3.3. 部署Tomcat实例2
  • 四、动静分离配置
      • 4.1. 配置Tomcat1的动态页面
      • 4.2. 配置Tomcat2的动态页面
      • 4.3. 配置Nginx的动静分离
  • 五、测试效果
      • 5.1. 测试静态页面
      • 5.2. 测试静态图片
      • 5.3. 测试负载均衡
  • 结语

前言

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

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

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

二、部署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的信息):

JSP test1 page

修改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的信息):

JSP test2 page

修改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服务奠定坚实基础。

http://www.wxhsa.cn/company.asp?id=1816

相关文章:

  • C# Avalonia 13- MoreDrawing - BlurEffects
  • 【IEEE出版】第三届算法、图像处理与机器视觉国际学术会议(AIPMV2025)
  • C++ - 了解STL的数据容器
  • 收费详情
  • bluetoothctl UUIDs
  • ANOLIS8安装配置ldap账号登录
  • 实用指南:小程序非主页面的数据动作关联主页面的数据刷新操作
  • 【光照】[光照模型]是什么?以UnityURP为例
  • 从知识管理困境到高效协同:Gitee Wiki如何重塑研发团队的知识体系
  • PHP数组去重和集合有什么关系
  • kkFileView4.4.0 安装与使用
  • ubuntu22挂载windows server2019的共享文件夹
  • PHP数组去重适用于哪些场景
  • 下载视频
  • 常用Linux配置
  • m1max可以装windows系统很卡吗
  • 1 | 移动语义:浅拷贝,深拷贝和引用拷贝,左值和右值
  • macbook air和windows系统区别
  • Gitee:国产代码托管的领军者,助力企业应对CODING停服挑战
  • 锂电池外围均衡电路仿真
  • Wireshark 学习笔记(一)
  • ELF 文件结构与加载流程介绍
  • 灵码产品演示:Maven 示例工程生成
  • NocoBase 本周更新汇总:优化及缺陷修复
  • CF1265E题解
  • 数组中的第K大元素
  • Gitee:本土开发者生态的崛起与数字化转型新范式
  • 从本土化优势到全场景覆盖:Gitee如何重塑中国开发者的DevOps体验
  • 【2025-09-11】脆弱的睡眠
  • 正则表达式基础