部署准备

在方案设计中,server-01负责部署移动端和后台管理系统的后端服务。server-02则部署Nginx服务器,承担以下双重角色:
- 作为移动端和后台管理系统的前端项目Web服务器
- 作为后端服务的反向代理
Nginx作为统一的请求入口,其处理逻辑如下:
- 静态资源请求:直接由Nginx响应
- 动态接口请求:Nginx将请求代理至后端服务,并将响应结果返回客户端
知识点:
代理
代理(Proxy)是网络通信中的重要中间层服务,其核心功能是作为客户端与服务器之间的中介桥梁。具体工作流程如下:客户端将请求发送至代理服务,代理接收后转发至目标服务器,获取服务器响应后再将结果返回给客户端。这一过程可通过下图直观展示。

代理主要分为正向代理和反向代理两种类型。需要明确的是,两者的核心机制相同,都是作为客户端与服务端之间的中介存在。区别在于代理对象不同:正向代理代表客户端向服务端发起请求,而反向代理则代表服务端接收客户端请求。
以下是正向代理和反向代理的两个应用场景:
正向代理案例
某学校为限制学生沉迷网络游戏,设置了防火墙屏蔽所有游戏网站。机智的小明同学通过代理服务器成功绕过防火墙限制,这就是典型正向代理的应用。

反向代理
随着某电商平台访问量的持续攀升,单一后端服务器已无法应对高并发场景的需求。为此,需要通过部署多台后端服务器来分担系统压力。那么如何实现客户端请求在这些服务器间的均衡分发呢?最常见的解决方案是采用代理服务:即部署一个代理服务作为后端服务器的统一入口接收请求,再将这些请求智能地分配到各个后端服务器。这种架构中的代理服务就是典型的反向代理实现。

Nginx
Nginx 是一款 高性能的 HTTP 服务器、反向代理服务器、负载均衡器和静态资源服务器,核心特点是「轻量、高并发、低内存占用」,被广泛用于生产环境的服务部署。
配置和启动
1.配置nginx存储库
配置的好处:通过 yum 一键安装 / 升级官方适配的 Nginx,自动解决依赖、保障安全,无需手动编译。
创建/etc/yum.repos.d/nginx.repo文件
vim /etc/yum.repos.d/nginx.repo
增加如下内容
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2.在线安装Nginx
执行以下命令,安装Nginx
yum -y install nginx
3.启动Nginx
执行以下命令启动Nginx
systemctl start nginx
执行以下命令查看Nginx运行状态
systemctl status nginx
执行以下命令设置开机自启
systemctl enable nginx
4.访问Nginx服务默认首页
访问http://192.168.200.128,能访问到如下页面,则证明Nginx运行正常。

访问不了的开放80端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
以下是Nginx核心目录与文件的说明:
配置文件相关
/etc/nginx/- Nginx主配置文件目录/etc/nginx/nginx.conf- 核心配置文件,包含全局配置项/var/log/nginx/- 日志存储目录/var/log/nginx/access.log- 记录所有访问请求的日志/var/log/nginx/error.log- 记录服务器错误信息的日志
配置文件概述
配置文件结构
nginx.conf文件采用层级化设计,整体由多个区块(block)组成。每个区块既可配置各类参数,也能嵌套子级区块,形成清晰的树状结构。具体配置架构如下图所示:
Nginx配置文件nginx.conf通过include指令加载了/etc/nginx/conf.d目录下的所有.conf文件,该目录的配置文件结构如下图所示。
重要配置说明
以下是对关键配置参数的详细介绍:
全局配置块(main block)
全局配置块位于配置文件的最顶层,包含控制Nginx服务器整体运行的核心参数,主要包括:
user:设置运行Nginx工作进程的用户及用户组worker_processes:配置工作进程数量error_log:定义全局错误日志的存储路径
events block
events 配置块位于 main 配置块内部,用于定义 Nginx 服务器的连接处理机制,主要控制客户端连接的处理方式。
http block
HTTP block 配置位于 main block 中,主要用于设置 HTTP 服务器相关功能。主要配置项包括:
- access_log:设置访问日志的存储路径
- log_format:定义访问日志的格式规范
server block
Nginx 的 server block 配置位于 http block 中,用于设置虚拟主机。单个 Nginx 服务可以承载多个虚拟主机,每个虚拟主机都能独立提供服务。通过这种机制,我们可以在同一台服务器上部署多个完全独立的网站,如下图所示。

每个虚拟主机通过独立的 server block 进行配置,主要包含以下参数:
- listen:设置虚拟主机监听的端口号
- server_name:指定虚拟主机的域名或 IP 地址
location block
location block 位于 server block 内部,主要用于配置请求处理逻辑。每个 server block 可以包含多个 location block 配置。例如:
server {
listen 80;
server_name www.baidu.com;
location /index {
root /var/www/html;
}
location /api {
proxy_pass http://backend-api;
}
}
项目打包
后端代码打包:


前端打包:


所以我们需要修改.env.production文件中VITE_APP_BASE_URL环境变量的值,修改结果如下
VITE_APP_BASE_URL='http://lease.atguigu.com'
安装JDK
- 获取JDK安装包
将资料中提前下载好的JDK上传到server01,也在服务器执行以下命令可直接下载。
wget https://download.oracle.com/java/17/archive/jdk-17.0.8_linux-x64_bin.tar.gz
- 解压JDK安装包
执行以下命令将jdk解压到/opt目录
tar -zxvf jdk-17.0.8_linux-x64_bin.tar.gz -C /opt
- 测试JDK安装效果
执行以下命令,观察输出是否正常
/opt/jdk-17.0.8/bin/java -version
部署
上传jar包
请将后端项目的两个jar包上传至server01服务器的/opt/lease目录。若该目录不存在,请先创建目录再上传文件。
- 集成Systemd
为简化项目进程管理,我们采用Systemd来统一控制后端服务的启动、停止和重启操作。
- 移动端集成Systemd
创建lease-app.service文件
vim /etc/systemd/system/lease-app.service
内容如下
[Unit]
Description=lease-app
After=syslog.target
[Service]
User=root
ExecStart=/opt/jdk-17.0.8/bin/java -jar /opt/lease/web-app-1.0-SNAPSHOT.jar 1>/opt/lease/app.log 2>&1
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
后台管理系统集成Systemd
创建lease-admin.service文件
vim /etc/systemd/system/lease-admin.service
内容如下
[Unit]
Description=lease-admin
After=syslog.target
[Service]
User=root
ExecStart=/opt/jdk-17.0.8/bin/java -jar /opt/lease/web-admin-1.0-SNAPSHOT.jar 1>/opt/lease/admin.log 2>&1
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
启动项目
执行以下命令启动两个后端项目。
systemctl start lease-app
systemctl start lease-admin
上传dist文件
将 rentHouseAdmin 项目编译生成的 dist 文件部署到 server02 服务器的 /usr/share/nginx/html/admin 目录下。
最终目录结构应为:
/usr
└── share
└── nginx
└── html
└── admin
├── assets
└── index.html
└── ...
配置Nginx服务器
创建配置文件:/etc/nginx/conf.d/admin.conf
vim /etc/nginx/conf.d/admin.conf
内容如下
server {
listen 80;
server_name www.test.com;
location / {
root /usr/share/nginx/html/admin/dist;
index index.html;
}
location /admin {
proxy_pass http://192.168.200.128:8080;
}
}
重新加载Nginx配置文件
执行以下命令重新加载配置文件
systemctl reload nginx
访问项目
访问http://www.test.com
本地hosts文件新增域名映射(C:\Windows\System32\drivers\etc)


所有的接口都是502,查看nginx日志提示如下:
问题是 CentOS 7 的 SELinux 安全机制拦截了 Nginx 访问后端 8080 端口的权限(不是防火墙,也不是配置错误)
方案 1:允许 Nginx 发起网络连接(推荐,安全)
SELinux 默认禁止 Nginx 对外发起连接,执行以下命令授权:
bash
运行
# 允许 Nginx 网络连接(永久生效)
setsebool -P httpd_can_network_connect 1
- 命令说明:
setsebool:修改 SELinux 布尔值配置;-P:永久生效(重启服务器也不会失效);httpd_can_network_connect 1:允许 Apache/Nginx 这类 Web 服务发起网络连接(1 = 开启,0 = 关闭)。
授权后 无需重启 Nginx,直接在浏览器访问 www.test.com/admin/login/captcha,502 错误会立即消失。
Nginx反向代理与项目部署实战


1474

被折叠的 条评论
为什么被折叠?



