nginx实现反向代理负载均衡

 Nginx实现反向代理

  nginx代理基于是ngx_http_proxy_module模块的功能,该模块有很多属性配置选项,如:

    proxy_pass:指定将请求代理至server的URL路径;

    proxy_set_header:将发送至 server的报文的某首部进行重写

    proxy_send_timeout:在连接断开之前两次发送到server的最大间隔时长;过了这么长时间后端还是没有收到数据,连接会被关闭

    proxy_read_timeout:是从后端读取数据的超时时间,两次读取操作的时间间隔如果大于这个值,和后端的连接会被关闭。

    proxy_connect_timeout: 是和后端建立连接的超时时间

proxy_pass配置常见用法有三种:

1、location的/uri将被替换为/newuri,如下:

location /uri {

    proxy_pass http://ip:port/newuri;

}

应用场合:页面很固定的时候(如淘宝双十一的主界面)

将/mobi 的请求跳转到新服务器上/mobile目录下

location /mobi/ {

    proxy_pass http://172.16.100. 1/mobile/index.php;

}

应用场合:用于流量的分流,将特定的请求分流道特定的服务器上

2、如果location的URI是通过模式匹配定义的,其URI将直接被传递,而不能为其指定转换的另一个URI。

location ~ ^/mobile {

    proxy_pass http://172.16.100.2;

}

3、如果在location中使用的URL重定向,那么nginx将使用重定向后的URI处理请求,而不再考虑之前定义的URI

location /youxi {

    rewrite ^(.*)$ /index.html break;

    proxy_pass http://172.16.100.1;

}

proxy_set_header

proxy_set_header可将发送至server的报文的某首部进行重写;常用于nginx做负载均衡时,获取客户端IP时,需要添加forward头部。

proxy_set_header Host     $host;

proxy_set_header X-REMOTE-IP     $remote_addr;

proxy_set_header X-Forwarded-For      $proxy_add_x_forwarded_for;

原有请求报文中如果存在X-Forwared-For首部,则将client_addr以逗号

分隔补原有值后,否则则直接添加此首部;

$proxy_add_x_forwarded_for; (从后端的服务器上能看到RS的真实IP)

日志查看:

"$remote_addr" $host "$http_x_forwarded_for"

  nginx负载均衡是ngx_http_upstream_module模块的功能,需要在配置文件http块上下文中定义upstream块,指定一组负载均衡的后端服务器,然后在proxy_pass中引用,就可以反向代理时实现负载均衡了。

语法:server  address  [parameters];

paramerters:

    weight:负载均衡策略权重,默认为1;

    max_fails:在一定时间内(这个时间在fail_timeout参数中设置)检查这个服务器是否可用时产生的最多失败请求数

    fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用,进行对后端服务器的健康状态检查;

    backup:当所有后端服务器都宕机时,可以指定代理服务器自身作为备份,对外提供维护提示页面;

    down:永久不可用。

  upstream块里可以用多个server选项配置多个后端服务器,同时还可配置对后端服务器的健康状态检查,可以在server后面加上max_file(proxy_next_upstream指定检查策略,默认为返回超时为失败)和fail_timeout参数实现;也可以用health_check选项来实现健康检测可以指定的参数较多,不过需要定义在location上下文中。

  另外,可以指定代理服务器自身作为备份server,当所有后端服务器都宕机时,对外提供维护提示页面。还可以指定负载均衡策略:主要有round_robin(加权轮询,默认)、

hash、ip_hash、least_conn(最少连接)和least_time(最少响应时间,商业版本),策略定义在upstream上下文即可;

配置文件实例:

在http块定义upstream:
   upstream server-cluster {
         server 172.17.253.107:80 weight=4;
         server 172.17.253.157:80 weight=4;
         server 172.17.233.166:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_expect_alive http_2XX http_3XX;
        }
        upstream static-cluster {
         server 172.17.250.209:80;
         server 172.17.254.148:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_expect_alive http_2XX http_3XX;
        }
 在server段引用
 location  ~* .jpg|.png|.gif|.jpeg$ {
                proxy_pass http://static-cluster;
        }

 location  ~* .js|.css|.html|.xml$ {
                proxy_pass http://static-cluster;
        }

对real-server进行健康检测

在http段中
upstream basic_server {
                server 192.168.17.175:80 weight=2;
                server 192.168.17.176:80 weight=5;
                check interval=3000 rise=2 fall=5 timeout=2000 type=http;
                check_http_expect_alive http_2xx http_3xx;
        }
在server段中
server {
        location /status {
        check_status;
        }
}
相关文章

相关标签/搜索