一个使用 Nginx 进行反向代理和负载均衡的示例配置

假设你有两个后端服务器(backend1 和 backend2),并且你希望 Nginx 将请求分发到这两个服务器上。

1、安装 Nginx

首先,确保你已经安装了 Nginx。如果没有安装,可以使用以下命令进行安装(以 CentOS 为例):

复制代码
sudo yum install epel-release
sudo yum install nginx

2、配置 Nginx

编辑 Nginx 的配置文件,通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ 目录下。你可以创建一个新的配置文件,例如 proxy.conf。

复制代码
sudo vim /etc/nginx/conf.d/proxy.conf

3、示例配置

以下是一个完整的 Nginx 配置示例,展示了如何设置反向代理和负载均衡:

复制代码
# 定义上游服务器组
upstream backend {
    server backend1.example.com:80;
    server backend2.example.com:80;
    # 可以添加更多的服务器
    # server backend3.example.com:80;
}

# 配置 HTTP 服务器
server {
    listen 80;
    server_name example.com;

    # 访问日志
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # 反向代理配置
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 可以根据需要添加其他 location 块
    # location /api/ {
    #     proxy_pass http://backend;
    #     proxy_set_header Host $host;
    #     proxy_set_header X-Real-IP $remote_addr;
    #     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #     proxy_set_header X-Forwarded-Proto $scheme;
    # }
}

4、 解释配置

  • upstream backend: 定义了一个名为 backend 的服务器组,包含两个后端服务器 backend1.example.combackend2.example.com
  • server: 配置了一个 HTTP 服务器,监听 80 端口,并处理 example.com 的请求。
  • location /: 将所有请求反向代理到 backend 服务器组,并设置了一些常用的请求头。

5、测试配置

在保存配置文件后,测试 Nginx 配置是否正确:

复制代码
sudo nginx -t

6、重新加载 Nginx

如果配置文件没有问题,重新加载 Nginx 以应用新的配置:

复制代码
sudo systemctl reload nginx

7、 验证

打开浏览器,访问 http://example.com,你应该会看到请求被分发到 backend1 和 backend2 服务器上。你可以通过查看后端服务器的日志来确认请求是否被正确分发。

8、负载均衡算法

Nginx 支持多种负载均衡算法,包括轮询(默认)、IP 哈希、最少连接等。以下是一些示例:

9、 健康检查

Nginx 本身不支持内置的健康检查,但可以通过第三方模块(如 nginx_upstream_check_module)来实现。以下是一个简单的示例:

  • 安装 nginx_upstream_check_module

    下载并编译 Nginx 及模块

    wget http://nginx.org/download/nginx-1.21.3.tar.gz
    tar -zxvf nginx-1.21.3.tar.gz
    git clone https://github.com/yaoweibin/nginx_upstream_check_module.git

    cd nginx-1.21.3
    ./configure --add-module=../nginx_upstream_check_module
    make
    sudo make install

  • 配置健康检查

    upstream backend {
    server backend1.example.com:80;
    server backend2.example.com:80;
    check interval=3000 rise=2 fall=5 timeout=1000 type=http;
    check_http_send "HEAD /healthcheck HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
    }

    server {
    listen 80;
    server_name example.com;

    复制代码
      location /status {
          check_status;
          access_log off;
          allow 127.0.0.1;
          deny all;
      }
    
      location / {
          proxy_pass http://backend;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
      }

    }

通过以上步骤,你可以配置一个基本的 Nginx 反向代理和负载均衡。

相关推荐
测试员周周3 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
Re_Virtual4 小时前
centos 7环境下构建nginx 1.30
nginx·centos·rpmbuild
在角落发呆6 小时前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
裴东青8 小时前
10-实战:RuoYi-Cloud的自动化发布
运维·ci/cd·自动化
哎呦,帅小伙哦8 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
sxgzzn8 小时前
新能源场站数智化转型:基于数字孪生与AI的智慧运维管理平台解析
大数据·运维·人工智能
张小姐的猫8 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
CodeMartain9 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
xxx1x1x9 小时前
极客向:DLL/运行库故障的底层逻辑与自动化修复方案
运维·自动化·dll文件·dll·dll修复·dll缺失·dll一键修复
YuanDaima20489 小时前
Linux 进阶运维与 AI 环境实战:进程管理、网络排错与 GPU 监控
linux·运维·服务器·网络·人工智能