0%

nginx反向代理upstream配置backup的方法

需求

nginx作为反向代理,需要设置两个后端服务器(backend),其中一台backend作为备机(backup),另外一台backend作为24小时在线的小贴心,只有这台backend不小心挂了,才由备机接管服务。

配置方法

  • upstream配置
    1
    2
    3
    4
    upstream backend {
    server IP:port max_fails=3 fail_timeout=30s;
    server IP:port max_fails=3 fail_timeout=30s backup;
    }
  • server配置
  1. nginx与后端通过http协议通信
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    server {
    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协议通信
    }
    }
  2. nginx与后端通过https协议通信
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    server {
    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
    5
    upstream 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的权重值。就是给后宫娘娘们排个头衔,皇后的地位就比妃嫔的地位高。比如:
    1
    2
    3
    4
    5
    upstream 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; //这个是普通妃嫔,权重一般
    }
    这个例子中,皇后和普通妃嫔的权重比是6:3。如果我发起了9次请求,其中6次请求会转发给皇后,其中3次请求转发给普通妃嫔。虽然权重差距大,还是雨露均沾的。

参考博文

http://www.nginx.cn/5130.html

-------------本文结束感谢您的阅读-------------