Nginx反向代理与负载均衡配置
最近更新 2025年09月18日
资源编号 13279

Nginx反向代理与负载均衡配置

郑重承诺丨三色资源网提供安全交易、信息保真!
增值服务:
¥ 免费 元宝
VIP折扣
    折扣详情
  • 体验VIP会员

    免费

  • 月卡VIP会员

    免费

  • 年卡VIP会员

    免费

  • 永久VIP会员

    免费

开通VIP尊享优惠特权
立即下载 升级会员
详情介绍

文章摘要

这篇文章主要介绍了反向代理和负载均衡的相关知识。反向代理通过将客户端请求转发给后端服务器,可以有效隐藏后端服务器,增强安全性;同时,反向代理还支持SSL加速、缓存静态内容等功能。文章还详细讲解了负载均衡的原理和实现方法,包括轮询、最少连接数、哈希等多种负载均衡算法,以及如何通过Nginx进行反向代理和负载均衡的配置。文章还提供了Nginx的安装步骤、常用命令以及配置示例,帮助读者快速搭建反向代理和负载均衡系统。通过本文,读者可以更好地理解反向代理和负载均衡的作用,并掌握它们的实际应用方法。

什么是反向代理

反向代理(Reverse Proxy):反向代理中的代理服务器,代理的是服务器那端。代理服务器接收客户端请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器的角色。反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定
反向代理的用途:

隐藏后端服务器:客户端无法直接访问后端服务器,有助于提高安全性。
SSL 加速:可在反向代理层处理 SSL 加密,减轻后端服务器负担。
缓存静态内容:提高响应速度,降低后端服务器压力。
Nginx反向代理与负载均衡配置

什么是负载均衡

负载均衡是基于反向代理实现的,Nginx接收到客户端请求后,将请求分配给多个后端服务器上,避免某一台服务过载。通过负载均衡可以实现Web服务高可用和故障转移,只要服务没有全部宕机,就不会影响用户使用。
Nginx反向代理与负载均衡配置
负载均衡多种策略,主要是以下几种策略:
轮询:默认的负载均衡方法。客户端请求按顺序依次分配给每个后端服务器。
最少连接数:将客户端请求分配给当前活动连接数最少的服务器。
IP哈希:根据客户端的 IP 地址计算哈希值,将请求分配到特定的后端服务器。同一IP地址的请求将被分配到同一个后端服务器上。可能导致负载不均衡。
加权轮询:管理员给每个后端服务器设置一个权重,请求按照权重进行分配。
加权最少连接数:类似于加权轮询,但分配请求时考虑每台服务器的连接数和权重。
随机:随机选择一台后端服务器来处理请求。可能出现不均衡的负载分配。

安装 Nginx

下载资源
下载 Nginx 并解压。

# 下载 nginx 压缩包
wget -P /usr/local/src http://nginx.org/download/nginx-1.18.0.tar.gz
# 解压
tar -zxvf /usr/local/src/nginx-1.18.0.tar.gz -C /usr/local/src

安装依赖
Nginx 是基于 C 语言开发的,HTTP 模块使用了 pcre 来解析正则表达式,且可以使用 zlib 对 HTTP 包的内容进行 gzip 压缩,Nginx 不仅支持 HTTP 协议,还支持 HTTPS,HTTPS 需要 openssl 提供支持,所以安装 Nginx 之前必须先安装它所依赖的环境。

yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl-devel

安装 Nginx
编译并安装。

# 切换至 nginx 的解压目录
cd /usr/local/src/nginx-1.18.0
# 创建 nginx 的安装目录
mkdir -p /usr/local/nginx
# 指定 nginx 的安装路径
./configure --prefix=/usr/local/nginx/
# 编译并安装
make && make install

常用命令

# 切换目录
cd /usr/local/nginx

# 启动
sbin/nginx

# 重启
sbin/nginx -s reload

# 停止
sbin/nginx -s quit

访问
启动 Nginx 以后,浏览器访问:http://服务器IP:80/ 结果如下:

Nginx反向代理与负载均衡配置
Nginx配置
设置反向代理与负载均衡的简单示例:

http {
 upstream backend {
 least_conn;
 server backend1.example.com;
 server backend2.example.com;
 server backend3.example.com;
 }
 
    proxy_connect_timeout 600;
 server {
 listen 80;

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_pass:反向代理核心指令,这个指令用于将请求转发到指定的服务器,例如转发到本地8081端口服务,这样配置”proxy_pass http://127.0.0.1:8081;”。
upstream:负载均衡核心指令,用于定义服务器组,包含多个后端服务器,这里定义的服务器组的名称为backend。
proxy_set_header:用于设置代理请求头的指令,反向代理时,设置转发请求的HTTP请求头。
least_conn:用于设置负载均衡的服务器组,使用最少连接数配置。
proxy_connect_timeout:nginx代理参数,用于指定反向代理跟后端服务器连接超时的时间。

完整配置示例

完成配置包含负载均衡几种算法的配置、反向代理请求头配置、Nginx代理参数配置。
1、负载均衡算法
1.1 轮询
默认设置,直接配置 upstream,Nginx 会使用轮询算法。

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

1.2 最少连接数
使用 least_conn 指令来指定最少连接算法。

http {
    upstream backend {
        least_conn; # 使用最少连接算法
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

1.3 IP 哈希
使用 ip_hash 指令确保来自同一 IP 的请求被转发到同一台服务器。

http {
    upstream backend {
        ip_hash; # 使用 IP 哈希算法
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

1.4 加权轮询
为每个服务器设置权重,权重超高,分配到这台服务器的概率就越高。

http {
    upstream backend {
        server backend1.example.com weight=3 fail_timeout=30s; # 权重为3,30秒超时即算失败
        server backend2.example.com weight=2; # 权重为2
        server backend3.example.com;           # 默认权重为1
    }
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

1.5 加权最少连接
结合权重和最少连接。

http {
    upstream backend {
        least_conn; # 使用最少连接算法
        server backend1.example.com weight=3;
        server backend2.example.com weight=2;
        server backend3.example.com; 
              }
    server { 
       listen 80;
        location / { 
           proxy_pass http://backend; 
       } 
   }
}

1.6 随机
此功能需要使用第三方模块,例如 ngx_http_random_module ,标准Nginx 不支持随机选择。如果已安装此模块,可以这样配置。

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com; 
               # 启用随机选择
        random; 
   }
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

2、反向代理参数配置
反向代理参数可以配置到http块、server块、location块,配置到http块将对此http下的所有server生效,配置到server只能当前server生效,如若配置到location块,将接收到此location块的请求生效。

http {
    # 定义 upstream 块,用于管理后端服务器
    upstream backend {
        server backend1.example.com;  # 后端服务器 1
        server backend2.example.com;  # 后端服务器 2
    }
    # 配置服务器块
    server {
        listen 80;  # 监听 80 端口
        server_name example.com;  # 设置服务器域名

        # 设置客户端请求体大小限制
        client_max_body_size 10M;  # 最大请求体为 10MB

        # 表示客户端请求头部的缓冲区大小。绝大多数情况下一个请求头不会大于1k,不过如果有来自于wap客户端的较大的cookie它可能会大于 1k,Nginx将分配给它一个更大的缓冲区,这个值可以在large_client_header_buffers里面设置
        client_header_buffer_size 32k;

        # 表示一些比较大的请求头使用的缓冲区数量和大小,默认一个缓冲区大小为操作系统中分页文件大小,通常是4k或8k,请求字段不能大于一个缓冲区大小,如果客户端发送一个比较大的头,nginx将返回"Request URI too large" (414),请求的头部最长字段不能大于一个缓冲区,否则服务器将返回"Bad request" (400)
        large_client_header_buffers 4 32k;

3、反向代理请求头配置

location / {
    proxy_pass http://backend_server;  # 替换为您的后端服务器地址

    # 设置代理请求头
    proxy_set_header Host $host;  # 原始请求的主机名
    proxy_set_header X-Real-IP $remote_addr;  # 客户端真实 IP
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 转发链中的客户端 IP
    proxy_set_header X-Forwarded-Proto $scheme;  # 请求的协议(http/https)
    proxy_set_header X-Forwarded-Host $host;  # 转发请求的 Host
    proxy_set_header X-Forwarded-Port $server_port;  # 转发请求的端口
    proxy_set_header User-Agent $http_user_agent; # 客户端软件的信息,通常包含浏览器类型和版本号。 

   # 指示请求来源的 URL。
    proxy_set_header Referer $http_referer;    # 告知服务器客户端能够处理的内容类型
    proxy_set_header Accept $http_accept;

    # 可以根据需要添加自定义请求头    proxy_set_header Custom-Header "CustomValue";  # 自定义请求头示例
}

4、ssl配置(HTTPS)
需要安装 with-http_ssl_module 模块。

http{

     server{
        listen 443 ssl;
        #对应你的域名
        server_name test.com;
        ssl_certificate /usr/local/nginx/cert/ssl.crt;
        ssl_certificate_key /usr/local/nginx/cert/ssl.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;

        #如果是静态文件,直接指向目录,如果是动态应用,用proxy_pass转发一下
        location / {
                root /usr/local/service/ROOT;
                index index.html;
        }
    }

    #监听80端口,并重定向到443
    server{
        listen 80; 
       server_name test.com;
        rewrite ^/(.*)$ https://test.com:443/$1 permanent;
    }
}

5、vue配置

server {
    listen 80;  # 监听 HTTP 请求的 80 端口
    server_name your_domain.com;  # 替换为你的域名或 IP 地址

    location / {
        root /path/to/your/vue/dist;  # Vue 应用构建后的目录
        index index.html;  # 默认首页
        try_files $uri $uri/ /index.html;  # 处理前端路由,用于适配history模式
    }

    # 可选:设置 gzip 压缩
    gzip on;
    gzip_types text/plain application/json application/javascript text/css;
    gzip_min_length 256;
}
付费下载
当前内容需要支付免费 元宝才能下载
VIP折扣
    折扣详情
  • 体验VIP会员

    免费

  • 月卡VIP会员

    免费

  • 年卡VIP会员

    免费

  • 永久VIP会员

    免费

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

本站所有资源来源于网络,仅限用于学习研究;无任何技术支持!不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除内容。如果您喜欢,请支持正版。如有侵权请邮件与我们联系处理。

常见问题
  • 网盘有时候会因为名字 关键词导致失效 大家可以给管理员提供失效信息,我们会给大家适当积分进行奖励 我们会第一时间进行补充修正 感谢大家的配合 让我们共同努力 打造良好的资源分享平台
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务