首页  >  问答  >  正文

负载均衡 - 关于nginx反向代理的几点疑问?

我使用两台服务器来配置反向代理。
服务器A通过以下配置将全部请求转发到 test 服务器组(虽然组里只有1个)

listen 80;

root   /home/www;

......

upstream test {
    server 123.45.567.89:80 weight=1;  // 服务器B
}

location / {
    proxy_pass http://test;
}

通过浏览器访问服务器A ,返回了服务器B里的内容。
问题来了:
1.服务器B(被反向代理的服务器)貌似无需任何配置?
2.只要被代理的服务器没有做一些屏蔽设置,是不是我就可以加入到 upstream 里来做我的反向代理服务器?
3.用反向代理来做负载均衡,那么是不是服务器B上的项目要和服务器A上的项目一致?

给我你的怀抱给我你的怀抱2714 天前560

全部回复(2)我来回复

  • 怪我咯

    怪我咯2017-05-16 17:10:55

    第1点:简单来说被代理的对象是不需要什么配置的,但是要注意的是如果你要在B上处理请求的来源IP,那么需要对A上的nginx做一些配置,把源IP放到请求头里比如 X-Real-IP:xxx.xxx.xx.xx 然后B那里通过这个请求头获得真正的请求来源IP,否则你只能得到A的IP

    第2点:upstream 没用过,通常我用 proxy_pass

    location / {
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_set_header X-NginX-Proxy true;
    
          proxy_pass http://127.0.0.1:6101/;
          proxy_redirect off;
          proxy_buffering off;
        }

    第3点:通常来说是的。

    回复
    0
  • 高洛峰

    高洛峰2017-05-16 17:10:55

    1 被代理服务器B不需要什么设置
    2 在upstream 中加入多组服务器也就是所谓的负载均衡配置。然后配置 proxy_pass
    3 负载被均衡的服务器理论上是数据共享,业务相同,只是分布式部署在不同的机器,以减轻服务器压力。(楼主可以在同一台服务器中将同一个业务以不同端口启动多个服务,并配置负载均衡,验证一下 do yourself!)

    负载均衡策略目前有一下几种方式

    • 轮询(默认): 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

    • weight: 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

    • ip_hash: 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

    • fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。

    • url_hash(第三方):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

    回复
    0
  • 取消回复