需求
nginx作为反向代理,需要设置两个后端服务器(backend),其中一台backend作为备机(backup),另外一台backend作为24小时在线的小贴心,只有这台backend不小心挂了,才由备机接管服务。
配置方法
- upstream配置1 
 2
 3
 4upstream backend { 
 server IP:port max_fails=3 fail_timeout=30s;
 server IP:port max_fails=3 fail_timeout=30s backup;
 }
- server配置
- nginx与后端通过http协议通信1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11server { 
 listen port;
 server_name hostname;
 
 proxy_set_header Host $http_host;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 location / {
 proxy_pass http://backend; //nginx与后端通过http协议通信
 }
 }
- nginx与后端通过https协议通信1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17server { 
 listen port;
 server_name hostname;
 ssl on;
 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
 ssl_certificate /etc/nginx/server.pem;
 ssl_certificate_key /etc/nginx/server.key;
 ssl_dhparam /etc/nginx/dhparams.pem;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers on;
 proxy_set_header Host $http_host;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 location / {
 proxy_pass https://backend; //nginx与后端通过https协议通信
 }拓展
- ip_hash策略用于均衡负载,根据用户的源IP分发流量到各个backend。比如我(我的IP是个特定值)的第一个http请求到了backend1,nginx会记住我的选择,以后凡是我发起的请求,都将转发到backend1。这种方式常用于做会话保持。
- ip_hash策略可以搭配down使用。也就是可以设置永久移除某个backend。比如:1 
 2
 3
 4
 5upstream backend { 
 ip_hash; //负载均衡策略
 server IP:port max_fails=3 fail_timeout=30s;
 server IP:port max_fails=3 fail_timeout=30s down; //永久移除该backend,nginx不会把流量转发到该backend。down就是把它打入冷宫。
 }
- ip_hash策略可以搭配weight使用,设置各个backend的权重值。就是给后宫娘娘们排个头衔,皇后的地位就比妃嫔的地位高。比如:这个例子中,皇后和普通妃嫔的权重比是6:3。如果我发起了9次请求,其中6次请求会转发给皇后,其中3次请求转发给普通妃嫔。虽然权重差距大,还是雨露均沾的。1 
 2
 3
 4
 5upstream backend { 
 ip_hash; //负载均衡策略
 server IP:port max_fails=3 fail_timeout=30s weight=6; //这个是皇后,位高权重
 server IP:port max_fails=3 fail_timeout=30s weight=3; //这个是普通妃嫔,权重一般
 }
