首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Nginx配置CDN负载均衡

使用Nginx配置CDN负载均衡

作者头像
西里网
发布2025-08-22 08:57:33
发布2025-08-22 08:57:33
13300
代码可运行
举报
文章被收录于专栏:西里网CSDN博客西里网CSDN博客
运行总次数:0
代码可运行
参考资料

  1. 什么是Range回源?
  2. 单连接带宽限制 设置教程
  3. 跟随CDN服务 与 跟随源站有什么区别
  4. 什么是鉴权URL?
  5. CDN配置:监控告警及规则条件参数设置指南
  6. CDN详细分析讲解,包括添加URL跳转时的参数说明
  7. 如何配置自定义响应头参数
  8. 如何配置页面优化

使用Nginx配置CDN负载均衡

使用Nginx配置CDN负载均衡

Nginx可以作为高效的CDN负载均衡器,将请求分发到多个CDN节点。以下是详细的配置方法:

基础配置方案

1. 配置upstream模块

nginx.conf或站点配置文件中添加upstream块:

代码语言:javascript
代码运行次数:0
运行
复制
  1. http {
  2. upstream cdn_pool {
  3. # 配置多个CDN节点
  4. server cdn1.yourdomain.com;
  5. server cdn2.yourdomain.com;
  6. server cdn3.yourdomain.com;
  7. # 可选的负载均衡方法:
  8. # least_conn; # 最少连接
  9. # ip_hash; # IP哈希保持会话
  10. # random; # 随机分配
  11. # 权重配置示例
  12. server cdn1.yourdomain.com weight=5;
  13. server cdn2.yourdomain.com weight=3;
  14. server cdn3.yourdomain.com weight=2;
  15. }
  16. }
2. 配置server块
代码语言:javascript
代码运行次数:0
运行
复制
  1. server {
  2. listen 80;
  3. server_name yourdomain.com;
  4. location / {
  5. proxy_pass http://cdn_pool;
  6. proxy_set_header Host $host;
  7. proxy_set_header X-Real-IP $remote_addr;
  8. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9. # 健康检查配置
  10. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  11. proxy_connect_timeout 2s;
  12. proxy_read_timeout 5s;
  13. proxy_send_timeout 5s;
  14. }
  15. }

高级配置方案

1. 基于地理位置的CDN选择
代码语言:javascript
代码运行次数:0
运行
复制
  1. http {
  2. # 定义不同区域的CDN
  3. upstream cdn_asia {
  4. server asia-cdn1.yourdomain.com;
  5. server asia-cdn2.yourdomain.com;
  6. }
  7. upstream cdn_europe {
  8. server eu-cdn1.yourdomain.com;
  9. server eu-cdn2.yourdomain.com;
  10. }
  11. upstream cdn_america {
  12. server us-cdn1.yourdomain.com;
  13. server us-cdn2.yourdomain.com;
  14. }
  15. # 使用geo模块
  16. geo $geo {
  17. default cdn_america;
  18. 1.0.0.0/8 cdn_asia;
  19. 2.0.0.0/8 cdn_europe;
  20. # 更多IP范围...
  21. }
  22. map geo upstream_pool {
  23. cdn_asia cdn_asia;
  24. cdn_europe cdn_europe;
  25. cdn_america cdn_america;
  26. }
  27. }
  28. server {
  29. listen 80;
  30. server_name yourdomain.com;
  31. location / {
  32. proxy_pass http://$upstream_pool;
  33. # 其他proxy设置...
  34. }
  35. }
2. 动态CDN选择(基于性能)
代码语言:javascript
代码运行次数:0
运行
复制
  1. http {
  2. lua_shared_dict cdn_performance 10m;
  3. init_by_lua_block {
  4. local cdn_list = {
  5. { url = "cdn1.yourdomain.com", weight = 5 },
  6. { url = "cdn2.yourdomain.com", weight = 3 },
  7. { url = "cdn3.yourdomain.com", weight = 2 }
  8. }
  9. ngx.shared.cdn_performance:set("cdn_list", cjson.encode(cdn_list))
  10. }
  11. }
  12. server {
  13. listen 80;
  14. server_name yourdomain.com;
  15. location / {
  16. access_by_lua_block {
  17. local cjson = require "cjson"
  18. local http = require "resty.http"
  19. local cdn_list = cjson.decode(ngx.shared.cdn_performance:get("cdn_list"))
  20. -- 测试CDN响应时间
  21. local best_cdn = cdn_list[1]
  22. local min_latency = math.huge
  23. for _, cdn in ipairs(cdn_list) do
  24. local httpc = http.new()
  25. httpc:set_timeout(1000) -- 1秒超时
  26. local start = ngx.now()
  27. local res, err = httpc:request_uri("http://"..cdn.url.."/ping")
  28. local latency = ngx.now() - start
  29. if res and res.status == 200 then
  30. local score = cdn.weight / (latency + 1)
  31. if score > (best_cdn.weight / (min_latency + 1)) then
  32. best_cdn = cdn
  33. min_latency = latency
  34. end
  35. end
  36. httpc:close()
  37. end
  38. ngx.var.best_cdn = best_cdn.url
  39. }
  40. proxy_pass http://$best_cdn;
  41. proxy_set_header Host $host;
  42. # 其他proxy设置...
  43. }
  44. }

健康检查配置

1. 被动健康检查
代码语言:javascript
代码运行次数:0
运行
复制
  1. upstream cdn_pool {
  2. server cdn1.yourdomain.com max_fails=3 fail_timeout=30s;
  3. server cdn2.yourdomain.com max_fails=3 fail_timeout=30s;
  4. server cdn3.yourdomain.com max_fails=3 fail_timeout=30s;
  5. }
2. 主动健康检查(需要Nginx Plus)
代码语言:javascript
代码运行次数:0
运行
复制
  1. upstream cdn_pool {
  2. zone cdn_pool 64k;
  3. server cdn1.yourdomain.com;
  4. server cdn2.yourdomain.com;
  5. server cdn3.yourdomain.com;
  6. health_check interval=5s fails=3 passes=2 uri=/health;
  7. }

缓存优化配置

代码语言:javascript
代码运行次数:0
运行
复制
  1. proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CDN_CACHE:10m inactive=60m use_temp_path=off;
  2. server {
  3. # ...其他配置...
  4. location / {
  5. proxy_cache CDN_CACHE;
  6. proxy_cache_key "
  7. proxy_cache_valid 200 302 10m;
  8. proxy_cache_valid 404 1m;
  9. proxy_pass http://cdn_pool;
  10. # ...其他proxy设置...
  11. }
  12. }

日志配置

代码语言:javascript
代码运行次数:0
运行
复制
  1. log_format cdn_log 'remote_addr - remote_user [
  2. '"
  3. '"
  4. 'CDN: upstream_addr Response: upstream_response_time';
  5. server {
  6. access_log /var/log/nginx/cdn_access.log cdn_log;
  7. error_log /var/log/nginx/cdn_error.log;
  8. # ...其他配置...
  9. }

配置验证和重载

代码语言:javascript
代码运行次数:0
运行
复制
  1. # 测试配置语法
  2. sudo nginx -t
  3. # 重载配置
  4. sudo nginx -s reload

注意事项

  1. 确保所有CDN节点配置相同的缓存规则
  2. 监控各CDN节点的性能表现
  3. 定期检查Nginx负载均衡状态:
    1. # 查看Nginx状态
    2. sudo nginx -T
    3. # 查看连接状态
    4. sudo ss -tulnp | grep nginx
  4. 对于HTTPS站点,需要配置SSL终止或SSL透传

以上配置可以根据您的具体需求进行调整,实现高效的多CDN负载均衡方案。

TAG:使用Nginx配置CDN负载均衡

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考资料
  • 使用Nginx配置CDN负载均衡
  • 使用Nginx配置CDN负载均衡
    • 基础配置方案
      • 1. 配置upstream模块
      • 2. 配置server块
    • 高级配置方案
      • 1. 基于地理位置的CDN选择
      • 2. 动态CDN选择(基于性能)
    • 健康检查配置
      • 1. 被动健康检查
      • 2. 主动健康检查(需要Nginx Plus)
    • 缓存优化配置
    • 日志配置
    • 配置验证和重载
    • 注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档