Camunda:高可用方案思路(Nginx及其配置)

101 阅读2分钟

Nginx

部署多个web服务,利用nginx反向代理,根据权重(weight)进行转发;

登录权限验证相关的,可以用ip_hash进行转发。

Nginx配置示例

server{
    #监听端口
    server_name "ip"
    listen "port";
    location / {
        proxy_pass http://test_weight_proxy;
        #设置的请求头是传递给后端服务器的
        proxy_set_header Host $host;
    }
    location /login/ {
        proxy_pass http://test_ip_hash_proxy;
        proxy_set_header Host $host;
    }
}

#权重
upstream test_weight_proxy{
    server ip:prot weight = 3;
    server ip:prot weight = 3;
    server ip:prot weight = 3;
}

#ip_hash
upstream test_ip_hash_proxy{
    ip_hash;
    server ip:prot;
    server ip:prot;
    server ip:prot;
}

Nginx负载均衡方式

  • 轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉能够被自动剔除。轮询算法适合服务器配置相当,无状态且短平快的服务使用。
  • weight权重:指定轮询的几率,weight和后端的访问比例成比例,weight权重越高比例越大。通常用于后端服务器配置不均的情况。
  • ip_hash:上面两种算法存在一个问题是就是无法做到会话保持,当用户登录到服务器上后,第二次请求的时候会被定位到服务器集群中的某一个,那么已经登录到某个服务器上的用户会重新定位到另一台,之前的登录信息会丢失。ip_hash算法可以解决这个问题,当用户再次访问请求时,会通过hash算法自动定位到已经登录的服务器上,这样每个客户端可以固定在某个web服务器上,解决客户端session的问题。

Nginx参考

Nginx详细参考


proxy_set_header

1.proxy_set_header设置的请求头是传递给后端服务器的

2.ngixn反向代理中proxy_set_header的设置:

 proxy_set_header       Host $http_host;

 proxy_set_header       X-Real-IP $remote_addr;

 proxy_set_header       X-Forwarded-For $proxy_add_x_forwarded_for;

 proxy_set_header        X-Forwarded-Proto  $scheme;

 proxy_set_header        X-Forwarded-Uri  $request_uri;

解析:

1)$http_host:代理服务器本身IP。

2)$remote_addr:前一节点的IP,并不一定是用户的真实IP。

$proxy_host:代理服务器请求的host,即后端服务器/源站的IP,后端服务器有可能还是代理服务器。

$proxy_port:代理服务器请求的后端服务器的端口。

3)$http_x_real_ip:获取的是前一节点的X-Real-IP的值。

4)$proxy_add_x_forwarded_for:获取的是前一节点的X-Forwarded-For的值。

3. X-Forwarded-For 对应不同值:

proxy_set_header X-Forwarded-For $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

当只有一层代理服务器的情况下,两者的X-Forwarded-For值一致,都是用户的真实IP。

$remote_addr是前一节点的IP,并不一定是用户的真实IP。

$proxy_add_x_forwarded_for变量 包含http_x_forwarded_for与remote_addr两部分,他们之间用逗号分开。