Nginx使用upstream配置负载均衡

nginx主要使用upstream配置多个服务器,设置负载均衡策略。

基本配置

upstream

upstream example.com{ 
  server host1; 
  server host2; 
} 

server

server {
    listen 90;
    server_name example.com;

    location / {
        proxy_set_header Host $host;
        proxy_set_header x-for $remote_addr;
        proxy_set_header x-server $host;
        proxy_set_header x-agent $http_user_agent;
        proxy_pass http://example.com;
    }
}

负载均衡策略

round-robin(轮询)

请求按时间顺序逐一分配服务器,如果服务器挂机,自动被剔除。nginx默认按轮询策略分配服务器。

缺点:轮询策略会导致同一客户端多次访问分配到不同的服务器,如果集群没有对session做处理,会导致客户端访问的session丢失。建议用作静态资源的分配策略,如图片服务器。

ip_hash

按请求的客户端ip计算hash,按hash结果分配服务器。这样每一个客户端固定访问同一服务器,一定程度上解决轮询策略session丢失的问题。

示例

upstream example.com{ 
  ip_hash;
  server host1; 
  server host2; 
} 

fair(第三方)

按服务器的响应时间来分配请求,响应时间短的优先分配。

 upstream example.com{    
   server host1; 
   server host2; 
   fair; 
}

url_hash(第三方)

计算请求url的hash,按hash的结果来分配服务器。这样每个url定向到同一服务器,此策略适用于服务器缓存url请求的场景。

 upstream example.com{ 
   server host1; 
   server host2; 
   hash $request_uri; 
   hash_method crc32; 
}

注意:在upstream中加入hash语句,server语句中不能有weight等其他的参数,hash_method是使用的hash算法。

服务器状态

  • weight:设置权重,默认为1,数值越大,负载分配到的机率越高。
  • max_fails:最大失败连接次数,失败连接的超时时长由fail_timeout指定;
  • fail_timeout:等待请求的目标服务器发送响应的时长;
  • backup:用于fallback的目的,所有服务均故障时才启动此服务器;
  • down:手动标记其不再处理任何请求;

示例

upstream bakend{ 
   ip_hash; 
   server host1 down; 
   server host2 weight=2; 
   server host3; 
   server host4 backup; 
}

注意:示例里的host可以为ip,也可以为ip加端口

版权声明:著作权归作者所有。

相关推荐

nginx配置Basic认证

最近在搭建kibana时,发现kibana是没有提供认证功能,所以想到给它加一个认证,最简单的就是basic auth认证。下面记录下nginx配置basic认证的过程。添加Basic Auth认证需要先创建密码文件,这里使用htpasswd。如果没有找到htpasswd命令,可以先安装httpd-tools。安装httpd-toolsyum install 

nginx配置gzip压缩

配置在nginx.conf的http节点,添加gzip配置如下:http {   gzip on;   gzip_min_length 1k;   gzip_buffers 4 16k;   gzip_comp_level 2;   gzip_types text/plain text/c

Nginx同一个域名配置多个项目

使用Nginx要在同一个域名下配置多个项目有两种方式:nginx按不同的目录分发给不同的项目启用二级域名,不同的项目分配不同的二级域名nginx按不同的目录分发给不同的项目在nginx的server节点配置server {     listen    80;     server_name example.c

Angular 5配置使用service-worker

Angular 5实现了一个适用于Angular应用的Service Worker,Angular CLI 1.6也添加了对service worker的支持。使用Angular CLI对应用添加service worker的支持分两种情况:新项目应用中添加service worker在已有项目中添加service&n

配置Nginx解决Angular 4刷新路由重新加载报404错误

Angular重新加载页面会报404,原因可分为三种:1、路由不存在2、Angular使用html5模式的路由,需要把所有路由的请求映射到index.html配置Nginx如下:location / {     root /var/html;     try_files $uri $uri/ /index.html =404;   } 其

Nginx配置WebSocket

Nginx配置WebSocketserver {     listen       80;     server_name  example.com;     location&