当前位置: 首页 > 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.zskr.cn/news/2888.html

相关文章:

  • bluetoothctl UUIDs
  • ubuntu22挂载windows server2019的共享文件夹
  • 下载视频
  • 1 | 移动语义:浅拷贝,深拷贝和引用拷贝,左值和右值
  • 正则表达式基础
  • 即时通讯管理平台(后台管理)介绍文档
  • 202312_DASCTF_找找找
  • pyinstaller 打包
  • 模拟运输振动试验台:保障产品运输安全的关键设备
  • wpf xaml数据绑定时,寻找数据源的几种方式 (RelativeSource)
  • 背负冲击试验机的设计原理与性能优化
  • LangChain
  • 军工企业涉密网文件导出用什么系统?答案在这里
  • Gateway 网关坑我! 被这个404 问题折腾了一年?
  • LangChain DIfy区别
  • 2008-2025年各省高考真题含解析
  • KUKA机器人的WorkVisual编程软件(转载)
  • [译] 我最爱的PostgreSQL 18特性:虚拟生成列
  • nasm 的 Hello, world 在 Windows 10 x64 上
  • 实用指南:52.前端的后端模式:为每个客户端定制专属「管家服务」
  • Agilent 34401A台式万用表远程读表
  • 马克思,本就是一位独立研究者
  • 产品二期,从GPT5规划开始
  • Redis能抗住百万并发的秘密
  • 深入理解JNI、安全点与循环优化:构建高健壮性Java应用
  • 英语_阅读_fascinating facts about water_待读
  • 即时通讯小程序 - 实践
  • CF2112C
  • ICPC/XCPC 做题记录
  • ABC394F