nginx实现http反向代理+负载均衡

原理

反向代理:反向代理(reverse proxy)方式是指以代理来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时对外就表现为一个反向代理服务器

以图中的例子来说nginx反向代理www.example.com (1)用户访问www.example.com时解析的ip是nginx的地址 (2,3)nginx根据代理协议去后端webserver取请求的内容 (4)再把得到内容返回给客户 对internet暴露的只有nginx 后端webserver完全是透明的

这里发生了两次路由 user->Nginx Nginx->Webserver

upstream是nginx中实现负载均衡的一个模块

 

配置

nginx配置(upstream)

一、定义upstream地址池

1、

upstream webserver {
    server 192.168.1.2:80 weight=10 max_fails=2 fail_timeout=30s;
    server 192.168.1.3:80 weight=10 max_fails=2 fail_timeout=30s;
}

 

2、upstream分配方式

rr 轮询 默认 weight(指定轮询几率,weight值和访问率成正比)

  max_fails:server通信的失败次数

  fail_timeout:fail_timeout时间段内,如果失败的通信次数大于指定的max_fails,则认为proxied server down,并持续fail_timeout定义的时间段

ip_hash(每个请求按访问的ip的hash结果分配 这样每个访问ip固定一台后端服务器 解决session问题)

fair(第三方)

url_hash(第三方)

 

二、proxy

1、

server
{
    ...(省略)
    location ...(省略) {
        proxy_next_upstream http_502 http_504 error timeout invalid_header; 
        proxy_set_header Host $host;    
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://webserver;
    }
}        

 

2、配置说明

proxy_next_upstream nginx默认判断失败节点状态以connect refuse和time out状态为准 proxy_next_upstream加上其它状态值

proxy_set_header 自定义向后端webserver发送请求header的值 不指定请求头中的host值会被后端webserver第一条server_name配置(第一条server_name匹配规则) #虚拟主机

X-Real-IP 设置为最后一个代理服务器的ip

X-Forwarded-For 记录请求经过的所有代理服务器ip(包括客户端ip)

 

ps: 如果用户自定义http header中用含下划线的值(app_version_code) nginx默认不做转发  

需要在http段设置 underscores_in_headers on;

 

参考: 

http://saiyaren.iteye.com/blog/1914865

https://bbs.konotes.org/thread-7797-1-1.html

posted @ 2015-06-12 10:24  metasequoia  阅读(950)  评论(0编辑  收藏  举报