Nginx 实现负载均衡 java web 实例教学

本文将详细介绍使用 Nginx 实现 Java Web 应用负载均衡的完整实例,包括 Java Web 项目搭建、Nginx 配置及负载均衡测试。

1. 搭建 Java Web 项目

这里使用 Spring Boot 框架来创建一个简单的 Java Web 项目,该项目会返回当前处理请求的服务器信息。

步骤

  1. 1. 创建 Spring Boot 项目:可以使用 Spring Initializr(https://start.spring.io/)来快速创建一个基本的 Spring Boot 项目,添加 Spring Web 依赖。
  2. 2. 编写控制器类:在 src/main/java 目录下创建一个控制器类,例如 HelloController.java,代码如下:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello from Server: " + System.getProperty("server.name", "Unknown");
    }
}
  1. 3. 打包并运行项目:使用 Maven 或 Gradle 打包项目,生成可执行的 JAR 文件。然后分别在不同的端口启动多个实例,模拟不同的服务器。例如,启动两个实例,分别监听 80818082 端口:
# 启动第一个实例,监听 8081 端口
java -Dserver.port=8081 -Dserver.name=Server1 -jar your-project.jar
# 启动第二个实例,监听 8082 端口
java -Dserver.port=8082 -Dserver.name=Server2 -jar your-project.jar

2. 配置 Nginx 实现负载均衡

步骤

  1. 1. 安装 Nginx:根据你的操作系统安装 Nginx,例如在 Ubuntu 上可以使用以下命令:
sudo apt-get update
sudo apt-get install nginx
  1. 2. 编辑 Nginx 配置文件:打开 Nginx 的配置文件,通常位于 /etc/nginx/nginx.conf/etc/nginx/sites-available/default。在配置文件中添加以下内容:
http {
    # 定义后端服务器组
    upstream backend_servers {
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
    }

    server {
        listen 80;
        server_name your_domain_or_ip;

        location / {
            # 配置反向代理和负载均衡
            proxy_pass http://backend_servers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

上述配置中:

  • upstream backend_servers:定义了一个名为 backend_servers 的后端服务器组,包含两个服务器 127.0.0.1:8081127.0.0.1:8082
  • proxy_pass http://backend_servers:将请求代理到 backend_servers 服务器组,Nginx 会自动实现负载均衡。
  1. 3. 检查并重新加载 Nginx 配置
sudo nginx -t  # 检查配置文件语法
sudo systemctl reload nginx  # 重新加载 Nginx 配置

3. 测试负载均衡

打开浏览器或使用工具(如 curl)多次访问
http://your_domain_or_ip/hello
,每次访问时,返回的服务器信息可能会不同,这表明 Nginx 已经成功实现了负载均衡。例如:

curl http://your_domain_or_ip/hello

多次执行上述命令,你可能会看到交替返回 Hello from Server: Server1Hello from Server: Server2

4. 其他负载均衡策略(可选)

Nginx 支持多种负载均衡策略,除了默认的轮询策略,还可以使用以下策略:

加权轮询

upstream 块中为每个服务器指定权重,权重越高,分配到的请求越多。

upstream backend_servers {
    server 127.0.0.1:8081 weight=2;
    server 127.0.0.1:8082 weight=1;
}

IP 哈希

根据客户端的 IP 地址进行哈希计算,将相同 IP 地址的请求始终分配到同一台服务器。

upstream backend_servers {
    ip_hash;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}

基于以上步骤,你可以实现一个简单的 Java Web 应用负载均衡实例。

还是那句话:干中学,学中干

如果觉得不错的话,麻烦点个关注,收藏谢谢。

毕竟:

相关文章

单例模式:Java世界的“独孤求败”

单例模式:Java世界的“独孤求败”在Java编程的世界里,有一种设计模式就像独孤求败一样,只用一个实例就能行走江湖,这就是单例模式。单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个...

Java单例模式详解:从入门到实战

Java单例模式详解:从入门到实战单例模式(Singleton Pattern)是Java中最简单、最常用、也最容易被误解的设计模式之一。它的核心目标简单明确:确保一个类只有一个实例,并提供一个全局访...

Java设计模式实战案例解析

Java设计模式实战案例解析在软件开发中,设计模式是一种经过验证的方法,用于解决常见的设计问题。它们不仅能够提高代码的复用性、灵活性和可维护性,还能促进团队成员之间的沟通和协作。本文将通过几个具体的实...

Redis 常见业务场景及实例(Java)

摘要:Redis 是一款高性能的内存键值存储,具有多种数据结构支持,广泛应用于各种业务场景。本文将详细介绍 Redis 在缓存、排行榜、计数器、消息队列等常见业务场景中的应用,并通过 Java 实例代...

Java原型模式详解:从克隆技术到实战应用

Java原型模式详解:从克隆技术到实战应用一、生活中的原型模式场景1:细胞分裂当一个细胞分裂时,它会复制自己的DNA结构生成完全相同的子细胞。这个过程不需要重新构建DNA链,而是直接基于已有模板复制。...