定义

Nginx 的反向代理功能允许将前端发送的动态请求转发到后端服务器(如 Spring Boot 项目内嵌的 Tomcat)。通过配置负载均衡,Nginx 可以将请求分配到多个后端服务器,从而提高系统的可用性和性能。

优势

使用 Nginx 进行反向代理和负载均衡的优势包括:

  1. 提高访问速度:通过缓存静态资源和减少后端服务器的负载,提升响应速度。
  2. 负载均衡:将大量请求按照指定策略分配给集群中的每台服务器,提高系统可用性。
  3. 安全性:后端服务器的接口不会直接暴露在公网,降低了安全风险。
  4. 高可用性:通过配置多个后端服务器,即使部分服务器故障,也不会影响整体服务。

配置方式

反向代理

nginx.conf 文件的 server -> location 块中配置 proxy_pass 属性,即可将前端的某些接口地址转发到后端。例如:

nginx复制

1
2
3
4
5
6
7
8
server {
listen 80;
server_name localhost;

location /api/ {
proxy_pass http://localhost:8080/admin/;
}
}

配置完成后,前端发送的请求 http://localhost/api/employee/login 会被 Nginx 转换为 http://localhost:8080/admin/employee/login 并转发到后端。

负载均衡

负载均衡本质上是基于反向代理实现的,通过将请求分配到多个后端服务器来提高性能和可用性。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 声明一组服务器,可以在此指定负载均衡策略
upstream webservers {
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}

server {
listen 80;
server_name localhost;

location /api/ {
proxy_pass http://webservers/admin/;
}
}

配置优化

负载均衡策略

Nginx 支持多种负载均衡策略,包括轮询(默认)、最少连接数和加权轮询。例如:

1
2
3
4
upstream webservers {
server 192.168.100.128:8080 weight=3;
server 192.168.100.129:8080;
}
  • weight:设置服务器的权重,默认值为 1。权重越高,分配到的请求越多。
健康检查

Nginx 支持简单的健康检查机制,可以自动移除故障服务器。例如:

1
2
3
4
5
upstream webservers {
server 192.168.100.128:8080;
server 192.168.100.129:8080;
server 192.168.100.130:8080 backup; # 备用服务器
}
  • backup:标记为备用服务器,仅在其他服务器不可用时使用。
会话保持

在某些场景下,可能需要将同一用户的请求转发到同一后端服务器(会话保持)。可以通过 ip_hash 实现:

1
2
3
4
5
upstream webservers {
ip_hash;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
SSL/TLS 支持

如果需要支持 HTTPS,可以在 server 块中配置 SSL 证书(以本站为例,需要先在域名提供商处申请www.penciy.com域名的证书,然后下载为nginx格式,部署到指定目录后即可通过nginx代理到动态资源):

1
2
3
4
5
6
7
8
9
10
11
server {
listen 443 ssl;
server_name localhost;

ssl_certificate /path/to/your/certificate.pem;
ssl_certificate_key /path/to/your/private.key;

location /api/ {
proxy_pass http://webservers/admin/;
}
}

__END__