Nginx系列05(负载平衡、动静分离)

打印 上一主题 下一主题

主题 947|帖子 947|积分 2841

目次
Nginx 负载平衡
Nginx 动静分离


Nginx 负载平衡



  • 概念:负载平衡是一种将网络流量分摊到多个后端服务器(节点)上的技能,以提高系统的可用性、性能和可扩展性。通过负载平衡,Nginx 可以根据一定的算法将客户端请求分发到差别的后端服务器,避免单个服务器因负载过高而出现性能瓶颈。
  • 原理:Nginx 通过upstream模块定义一组后端服务器,然后在server块或location块中使用proxy_pass指令将请求代理到upstream定义的服务器组。Nginx 支持多种负载平衡算法,常见的有:

    • 轮询(round - robin):依次将请求分配到后端服务器,每个服务器被选中的时机均等。
    • 加权轮询(weighted round - robin):根据服务器的性能或负载能力,为每个服务器分配一个权重,权重越大的服务器被选中的概率越高。
    • IP 哈希(ip - hash):根据客户端的 IP 地点计算一个哈希值,然后根据哈希值将请求分配到特定的服务器,如许可以确保同一客户端的请求始终被路由到同一台服务器,适用于需要保持会话同等性的场景。

  • 场景示例:假设有 3 台后端 Web 服务器,IP 地点分别为192.168.1.100、192.168.1.101、192.168.1.102,运行的端口都是8080,通过 Nginx 进行负载平衡配置如下:
  1. http {
  2.     upstream backend_servers {
  3.         # 使用轮询算法,默认不写算法就是轮询
  4.         server 192.168.1.100:8080;
  5.         server 192.168.1.101:8080;
  6.         server 192.168.1.102:8080;
  7.     }
  8.     server {
  9.         listen 80;
  10.         server_name example.com;
  11.         location / {
  12.             proxy_pass http://backend_servers; # 将请求代理到upstream定义的后端服务器组
  13.             proxy_set_header Host $host; # 将客户端请求中的Host头信息传递给后端服务器
  14.             proxy_set_header X-Real-IP $remote_addr; # 将客户端的真实IP地址传递给后端服务器
  15.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录客户端的真实IP地址,当存在多个代理时,这个头信息会包含多个IP地址
  16.             proxy_set_header X-Forwarded-Proto $scheme; # 将客户端请求的协议(http或https)传递给后端服务器
  17.         }
  18.     }
  19. }
复制代码
在这个配置中,upstream backend_servers定义了一个名为backend_servers的后端服务器组,包罗 3 台服务器。server块中的location /配置将全部请求通过proxy_pass代理到backend_servers服务器组,Nginx 会按照轮询算法将请求依次分发到 3 台后端服务器上。
Nginx 动静分离



  • 概念:动静分离是指将网站的静态资源(如图片、CSS、JavaScript 文件等)和动态资源(如 PHP、JSP 生成的页面,需要服务器动态计算和处置惩罚的内容)分开处置惩罚和存储。如许可以提高网站的性能和可维护性,因为静态资源可以被缓存,减少服务器的计算压力,而动态资源可以由专门的应用服务器处置惩罚。
  • 原理:Nginx 通过配置差别的location块来分别处置惩罚静态资源和动态资源请求。对于静态资源请求,Nginx 可以直接从当地文件系统读取并返回,同时可以配置缓存策略来提高访问速度;对于动态资源请求,Nginx 通过proxy_pass将请求转发到后端的应用服务器(如 Tomcat、PHP - FPM 等)进行处置惩罚。
  • 场景示例:假设网站的静态资源存放在/var/www/html/static目次,动态资源由运行在127.0.0.1:8080的 Tomcat 服务器处置惩罚,配置如下:
  1. http {
  2.     server {
  3.         listen 80;
  4.         server_name example.com;
  5.         # 处理静态资源请求
  6.         location /static/ {
  7.             root /var/www/html; # 静态资源的根目录,结合前面的location路径,实际访问的是/var/www/html/static目录下的文件
  8.             expires 30d; # 设置静态资源的缓存过期时间为30天,浏览器在30天内再次请求相同资源时,直接从本地缓存读取,减少服务器压力
  9.             access_log off; # 关闭静态资源的访问日志记录,减少日志文件大小
  10.         }
  11.         # 处理动态资源请求
  12.         location / {
  13.             proxy_pass http://127.0.0.1:8080; # 将请求转发到后端的Tomcat服务器
  14.             proxy_set_header Host $host; # 将客户端请求中的Host头信息传递给后端服务器
  15.             proxy_set_header X-Real-IP $remote_addr; # 将客户端的真实IP地址传递给后端服务器
  16.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录客户端的真实IP地址,当存在多个代理时,这个头信息会包含多个IP地址
  17.             proxy_set_header X-Forwarded-Proto $scheme; # 将客户端请求的协议(http或https)传递给后端服务器
  18.         }
  19.     }
  20. }
复制代码
在这个配置中,当客户端请求以/static/开头的资源时,Nginx 会直接从/var/www/html/static目次下读取文件并返回,同时设置了缓存逾期时间和关闭访问日志。当客户端请求其他资源时,Nginx 会将请求转发到127.0.0.1:8080的 Tomcat 服务器进行处置惩罚。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表