JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Nginx学习笔记(14) 用于定义上游服务的upstream模块

wys521 2024-10-16 14:40:57 精选教程 24 ℃ 0 评论

基本功能

upstream模块用于定义一个或一组上游服务(应用服务器)的相关信息

基本语法


upstream name {
	server address1 [parameters];
  server address2 [parameters];
  ...
}
默认值: 无
上下文: http

指令集

upstream    段名,以'{'开始,'}'结束,中间定义上有服务URL
server        定义上游服务地址
zone        定义共享内存,用于跨worker子进程
keepalive    对上游服务启用长连接
keepalive_requests    一个长连接最多请求个数
keepalive_timeout    空闲情形下,一个长连接的超时时间
hash                哈希负载均衡算法
ip_hash                依据IP进行哈希计算的负载均衡算法
least_conn            最少连接数负载均衡算法
least_time            最短响应时间负载均衡算法
random                随机负载均衡算法

基本用法

最简单的就是声明一个upstream,有点像变量,用的时候直接引用即可,通过upstream可以对上游服务器地址进行统一管理

upstream sales_api {
   server 10.10.16.99:8099;
}
server{
    listen       80;
    server_name sale.jabberwocky.cn;
    location ^~ /saleapi/{
      proxy_send_timeout   300;
      proxy_read_timeout   300;
      proxy_buffer_size    64k;
      proxy_buffers     16 32k;
      proxy_next_upstream http_502 http_504 error timeout invalid_header;
     #-------------------------------#
      proxy_pass http://sales_api;
     #-------------------------------#
      proxy_set_header Host  $host;
      proxy_set_header X-Forwarded-For  $remote_addr;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Proto $scheme;
    }

    location / {
      proxy_set_header X-Forwarded-For  $remote_addr;
      proxy_set_header   X-Real-IP $remote_addr;
      root  /usr/local/nginx/html/sale/;
    }
}

高可用特性

upstream在默认情况下会轮询上游服务器,每个请求会按照时间顺序逐一分配,如果其中一台后端服务器宕机,会自动剔除;能够提高整个系统的容错性。

upstream sales_api {
   server 10.10.16.99:8099;
   server 10.10.17.99:8099;
}
server{
    listen       80;
    server_name sale.jabberwocky.cn;
    location ^~ /saleapi/{
      proxy_send_timeout   300;
      proxy_read_timeout   300;
      proxy_buffer_size    64k;
      proxy_buffers     16 32k;
      proxy_next_upstream http_502 http_504 error timeout invalid_header;
     #-------------------------------#
      proxy_pass http://sales_api;
     #-------------------------------#
      proxy_set_header Host  $host;
      proxy_set_header X-Forwarded-For  $remote_addr;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Proto $scheme;
    }

    location / {
      proxy_set_header X-Forwarded-For  $remote_addr;
      proxy_set_header   X-Real-IP $remote_addr;
      root  /usr/local/nginx/html/sale/;
    }
}

其他分配请求的方式

除了最基本的轮询外,通过配置parameters可以实现加权轮询等其他分配方式

  • weight=number 加权轮询
upstream sales_api {
   server a weight=7;
   server b weight=3;
}
# 解释: 10次请求其中7次会转发到a服务器,3次转发到b服务器
  • max_conns=number 限制连接数(注意不是请求数)
upstream sales_api {
   server a max_conns=2;
   server b max_conns=2;
}
# 解释:用来限制同时连接到upstream负载上的单个服务器的最大连接数,
# 作用是可以对单个服务器进行限流,防止服务器超负荷运转.默认值为0,则表示没有限制
  • fail_timeout=time 服务器不可用判定
upstream sales_api {
   ip_hash;
   server a max_fails=3 fail_timeout=30s;
   server b max_fails=3 fail_timeout=30s;
}
# 解释: 在ip_hash轮询方式下,30s内请求某一应用失败3次,认为该应用宕机,后等待30s,
# 这期间不会再把新请求发送到宕机应用,时间到后再有新请求进来继续尝试连接宕机应用且仅尝试一次,
# 如果还是失败,则继续等待30s....以此循环,直到恢复
  • backup 备份服务器,仅当其他服务器都不可用时
upstream sales_api {
   ip_hash;
   server a ;
   server b backup;
}
# 解释: 仅当a服务器不可用时才会把请求转发到b服务器
  • down 标记服务器长期不可用,离线维护

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表