Nginx 负载均衡和缓存配置最佳实践

 更新时间:2025年08月21日 10:07:27   作者:趁你还年轻  
本文介绍Nginx负载均衡与缓存配置,涵盖upstream模块基础用法、轮询/加权轮询/IP哈希/最少连接等策略,以及代理缓存、静态资源缓存和SSL缓存的设置,本文通过实例代码给大家讲解的非常详细,感兴趣的朋友一起看看吧

Nginx 负载均衡配置

1. 基础配置

在 Nginx 中,负载均衡主要通过 upstream 模块实现,结合反向代理将请求分发到多个后端服务器。以下是一个基础配置示例:

http {
    upstream backend_servers {
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
        server 192.168.1.12:8080;
    }
    server {
        listen 80;
        server_name example.com;
        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
  • server:指定后端服务器的 IP 地址和端口。
  • proxy_pass:将请求转发到 upstream 定义的服务器组。
  • proxy_set_header:设置 HTTP 头,以便后端服务器可以获取请求的相关信息。

2. 负载均衡策略

Nginx 支持多种负载均衡策略:

轮询(默认):依次将请求分发到每个后端服务器。

upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
}

加权轮询:为每个服务器分配不同的权重,权重越高,分配到的请求越多。

upstream backend {
    server 192.168.1.101 weight=3;
    server 192.168.1.102 weight=2;
    server 192.168.1.103 weight=1;
}

IP 哈希:根据客户端的 IP 地址将请求分发到固定的后端服务器,适用于需要会话保持的场景。

upstream backend {
    ip_hash;
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
}

最少连接:将请求分发到当前连接数最少的服务器,适用于处理时间较长的请求。

upstream backend {
    least_conn;
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
}

3. 高级配置

健康检查:可以配置健康检查,自动移除不健康的服务器。

upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
    health_check interval=10s fails=3 passes=2 uri=/health port=8080;
}

备用服务器:可以指定备用服务器,当主服务器不可用时自动切换。

upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080 backup;
}

Nginx 缓存配置

1. 代理缓存

代理缓存是 Nginx 缓存后端服务器响应的一种方式,适用于动态内容的缓存。

http {
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g;
    server {
        location /dynamic/ {
            proxy_pass http://backend;
            proxy_cache my_cache;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            proxy_cache_use_stale error timeout http_500 http_502 http_503;
        }
    }
}
  • proxy_cache_path:定义缓存的存储路径、层级结构、缓存区域名称、最大缓存大小等。
  • proxy_cache:指定使用哪个缓存区域。
  • proxy_cache_valid:设置不同响应状态码的缓存有效期。
  • proxy_cache_use_stale:在某些情况下使用过期的缓存,如后端服务器错误或超时。

2. 静态资源缓存

对于静态资源,可以直接设置浏览器缓存时间,减轻服务器压力。

location ~* \.(jpg|png|gif)$ {
    root /var/www/images;
    expires 30d;
}
  • expires:设置浏览器缓存时间,单位可以是秒、分钟、小时、天等。

3. 高级缓存配置

Vary 响应头:根据请求的某些头部字段来缓存不同版本的资源

proxy_cache_valid 200 302 10m;
proxy_cache Vary;

连接和响应缓冲:优化连接和响应的缓冲设置

proxy_buffers 8 4k;
proxy_buffer_size 8k;
proxy_busy_buffers_size 16k;

SSL 缓存:如果使用 SSL,配置 SSL 会话缓存。

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;

缓存最佳实践

  • 合理设置缓存时间:根据资源更新频率设置合适的缓存时间。
  • 监控缓存命中率:定期检查缓存命中率,评估缓存策略的有效性。
  • 使用 CDN:利用 CDN 缓存静态资源,减轻服务器压力。
  • 缓存预热:部署新版本时,预先加载缓存,避免缓存穿透。
  • 安全性:确保缓存内容的安全性,避免敏感信息泄露。

通过合理配置 Nginx 的负载均衡和缓存功能,可以显著提升 Web 应用的性能和可靠性。

到此这篇关于Nginx 负载均衡和缓存配置的文章就介绍到这了,更多相关nginx 负载均衡与缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx流量拷贝的实现示例

    nginx流量拷贝的实现示例

    Nginx的ngx_http_mirror_module模块提供流量复制功能,可将生产环境流量实时复制到测试环境,用于功能验证、性能测试和问题排查,下面就来详细的介绍一下nginx流量拷贝的使用,感兴趣的可以了解一下
    2026-01-01
  • 使用nginx搭建点播和直播流媒体服务器的方法步骤

    使用nginx搭建点播和直播流媒体服务器的方法步骤

    本篇文章主要介绍了使用nginx搭建点播和直播流媒体服务器的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • keepalived+nginx实现网站高可用性

    keepalived+nginx实现网站高可用性

    本文主要介绍了keepalived+nginx实现网站高可用性,包含配置Keepalived实现双主热备集群架构,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • nginx proxy_pass转发规则解读

    nginx proxy_pass转发规则解读

    这篇文章主要介绍了nginx proxy_pass转发规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Nginx Location 指令简明指南

    Nginx Location 指令简明指南

    这篇文章主要介绍了Nginx Location 指令简明指南,本文讲解了它的基本语法、匹配过程、配置实例和全局变量,需要的朋友可以参考下
    2015-04-04
  • nginx版本号隐藏(附405 not allowed解决办法)

    nginx版本号隐藏(附405 not allowed解决办法)

    版本号泄露时攻击者会利用相应软件版本的当前漏洞,进行有效的相应攻击,本文主要介绍了nginx版本号隐藏,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • nginx location 配置 正则表达式实例详解

    nginx location 配置 正则表达式实例详解

    本文通过实例代码给大家介绍了nginx location 配置 正则表达式的问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • 关于nginx日志增加cookie信息

    关于nginx日志增加cookie信息

    这篇文章主要介绍了nginx日志增加cookie信息的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11
  • nginx下的代理服务器80端口被封的解决方案

    nginx下的代理服务器80端口被封的解决方案

    这篇文章主要是讲:通过nginx下面的代理服务器,实现访问A地址的时候自动代理到B地址的某个端口,主要用于标题说的某个端口被日.其他东西都正常的情况下,这玩意早上我刚刚测试过,这博客就是个很好的例子.
    2010-06-06
  • nginx配置IP白名单的详细步骤

    nginx配置IP白名单的详细步骤

    在日常运维工作中会碰到这样的需求,设置网站访问只对某些ip开放,其他ip的客户端都不能访问,下面这篇文章主要给大家介绍了关于nginx配置IP白名单的详细步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12

最新评论