Nginx实现反向代理负载均衡

简介:

说明:

网络模型中,nginx属于第7层,根据域名或目录配置负载均衡(代理),十分灵活;而lvs只能针对IP

环境:

DIR :   172.16.115.100(Nginx代理)

RS1:    172.16.115.157(Web服务器)

RS2:    172.16.115.202(Web服务器)


1. dir、rs1、rs2安装nginx(1台代理+2台Web服务器)

    命令 yum install -y nginx

 

2. 编辑dir上nginx的配置文件/etc/nginx/nginx.conf,开启子配置文件include /etc/nginx/conf.d/*.conf,并新建配置文件/etc/nginx/conf.d/lb.conf(需禁用掉/etc/nginx/conf.d/default.conf文件,如改名为default.conf.bak)

    说明:用到负载均衡模块->uptream;反向代理模块->proxy

    有向图:request -> proxy_pass -> upstream -> 执行机sever1/sever2/server3...

    内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  upstream hzp {
         # ip_hash; #将来自同一IP的请求分配给同一主机,避免刷新之后访问其他主机,实现“长连接”
         server 172.16.115.157:80;
         server 172.16.115.202:80;
         }
    server {
        listen 80;
        server_name www.huangzhenping.cn;
         location / {
         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_next_upstream  http_500 http_502 http_503 http_504 error timeout invalid_header;
         proxy_pass http: //hzp/ ;
            }
         }


     

   proxy_set_header:

     把客户端发送给nginx代理的首部进行重新定义或附加一个首部,然后传递给上上游服务器,VALUE可以是文本、变量或是文本和变量的组合,例如:proxy_set_head X-Real-IP $remote_addr,首部为”X-Real-IP”,值为“$remote_addr”,即客户端的IP地址,这样上游服务器就可以收到这个自定义的首部,可以利用此手段让上游服务器在访问日志中能够记录真实请求服务的IP地址,而不是记录全来自nginx代理的IP地址,有利于做日志分析;X-Forwarded-For 记录代理信息

   

   proxy_next_upstream:

   设置当上游服务器出现哪此错误时,将下一个请求转发到下一个上游服务器


   proxy_pass:

   设置代理服务器所使用的协议(http或https)、上游服务器地址(主机名或IP)和一个可选的URI被映射到一个位置

     

3. 修改rs1和rs2服务器web首页,并启动三台服务器上的Nginx服务

    命令 /etc/init.d/nginx start

    rs1:echo "hello,rs1" > /usr/share/nginx/html/index.html

    rs2:echo "hello,rs2" > /usr/share/nginx/html/index.html


4. 客户机上用curl测试:curl -xlocalhost:80 www.huangzhenping.cn

    结果: 权重1:1交替访问

 wKioL1i1Nw2AcqJCAABAGg7vT70993.png

 

5. dir上,修改配置文件/usr/local/nginx/conf/vhosts/lb.conf,增加权重,重启测试

    内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
upstream hzp {
         server 172.16.115.157:80 weight=3 max_fails=2 fail_timeout=30s;
         server 172.16.115.202:80 weight=1 max_fails=2 fail_timeout=30s;
         }
    server {
        listen 80;
        server_name www.huangzhenping.cn;
         location / {
         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_next_upstream  http_500 http_502 http_503 http_504 error timeout invalid_header;
         proxy_pass http: //hzp/ ;
            }
         }


    结果:3:1关系,交替访问

     wKioL1i1N2Oxb9yQAABIjGZnaG8038.png

 

 

6. 停止rs1上的nginx服务,再次测试

    结果:跳过rs1服务器,只访问rs2的Web;恢复rs1时,交替访问

spacer.gif wKioL1i1N3aw3XKmAABKN3MDRPs914.png

 

 wKiom1i1N3fzLFZ-AAAueT59hS4242.png

spacer.gif

 

 

备注:

1. upstream常用状态

down            server暂时不参与负载均衡

backup         其它所有的非backup机器down或者忙的时候,才请求backup机器

max_fails      请求失败次数,超过则返回proxy_next_upstream模块定义的错误

fail_timeout max_fails次失败后,暂停的时间

 

2. nginx负载均衡算法

轮询         默认

weight    权重轮询

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

fair          根据服务器的相应时间来分配,时间的优先,需安装upstream_fair模块

url_hash 根据url的hash分配结果分配,同一个url定向到同一后台服务器,提高缓存服务器的的效率,需

               装nginx的hash包

 

3. nginx全局变量

remote_addr             客户端ip,如:192.168.4.2
binary_remote_addr 客户端ip(二进制)
remote_port              客户端port,如:50472
remote_user              已经经过Auth Basic Module验证的用户名
host                           请求主机头字段,否则为服务器名称,如:dwz.stamhe.com
request                      用户请求信息,如:GET /?_a=index&_m=show&count=10 HTTP/1.1
request_filename     当前请求的文件的路径名,由root或alias和URI request组合而成,如:/webserver/htdocs/dwz/index.php
status                        请求的响应状态码,如:200
body_bytes_sent       响应时送出的body字节数数量。即使连接中断,这个数据也是精确的,如:40
content_length        请求头中的Content-length字段
content_type            请求头中的Content-Type字段
http_referer              引用地址
http_user_agent       客户端agent信息,如:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11
args                          如:_a=index&_m=show&count=10
document_uri         与$uri相同,如:/index.php
document_root       针对当前请求的根路径设置值,如:/webserver/htdocs/dwz
hostname                如:centos53.localdomain
http_cookie             客户端cookie信息
cookie_COOKIE       cookie COOKIE变量的值
is_args                      如果有$args参数,这个变量等于”?”,否则等于”",空值,如?
limit_rate                 这个变量可以限制连接速率,0表示不限速
query_string            与$args相同,如:_a=index&_m=show&count=10
realpath_root          如:/webserver/htdocs/dwz
request_body          记录POST过来的数据信息
request_body_file   客户端请求主体信息的临时文件名
request_method     客户端请求的动作,通常为GET或POST,如:GET
request_uri              包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。如:/index.php?_a=index&_m=show&count=10
scheme                  HTTP方法(如http,https),如:http
uri                           如:/index.php
request_completion  如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty),如:OK
server_protocol      请求使用的协议,通常是HTTP/1.0或HTTP/1.1,如:HTTP/1.1
server_addr             服务器地址,在完成一次系统调用后可以确定这个值,如:192.168.4.129
server_name           服务器名称,如:dwz.stamhe.com
server_port             请求到达服务器的端口号,如:80

 










本文转自 huangzp168 51CTO博客,原文链接:http://blog.51cto.com/huangzp/1902076,如需转载请自行联系原作者
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
6天前
|
应用服务中间件 nginx
百度搜索:蓝易云【如何用NGINX实现UDP四层反向代理?】
请注意,这个回答是基于NGINX目前的特性和功能,如果有新的版本或更新的特性,建议查阅NGINX官方文档或其他权威资源,以确保你得到最准确的配置信息。
36 0
|
6天前
|
JSON 应用服务中间件 API
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
122 1
|
6天前
|
负载均衡 应用服务中间件 nginx
nginx-tomcat反向代理以及负载均衡测试
nginx-tomcat反向代理以及负载均衡测试
|
6天前
|
负载均衡 应用服务中间件 API
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
45 4
|
2天前
|
负载均衡 安全 应用服务中间件
nginx配置ssl和反向代理的配置代码
【5月更文挑战第2天】nginx配置ssl和反向代理的配置代码
19 3
|
6天前
|
域名解析 弹性计算 应用服务中间件
基于nginx反向代理实现OSS固定域名IP访问
本文基于阿里云OSS手册:https://help.aliyun.com/zh/oss/use-cases/use-an-ecs-instance-that-runs-centos-to-configure-a-reverse-proxy-for-access-to-oss,继续深入讨论如何利用nginx反向代理,实现固定的IP/域名访问OSS bucket。官方文档能够解决大部分的反向代理固定IP访问oss bucket的场景,但是对于必须使用域名作为endpoint的系统,会出现signatrue鉴权问题。本文继续在官方文档的基础上,将反向代理需要域名作为endpoint的场景补齐方案。
|
6天前
|
负载均衡 监控 Unix
[AIGC] Nginx:一个高性能的 Web 服务器和反向代理
[AIGC] Nginx:一个高性能的 Web 服务器和反向代理
|
6天前
|
负载均衡 JavaScript 前端开发
Nginx实现反向代理、负责均衡、动静分离
Nginx实现反向代理、负责均衡、动静分离
|
6天前
|
应用服务中间件 nginx
nginx进行反向代理的配置
在Nginx中设置反向代理的步骤:编辑`/etc/nginx/nginx.conf`,在http段加入配置,创建一个监听80端口、服务器名为example.com的虚拟主机。通过`location /`将请求代理到本地3000端口,并设置代理头。保存配置后,使用`sudo nginx -s reload`重载服务。完成配置,通过example.com访问代理服务器。
35 0
|
6天前
|
应用服务中间件 Nacos nginx
nacos 2.3.2模式 standalone 使用nginx 反向代理之后访问nacos控制台静
nacos 2.3.2模式 standalone 使用nginx 反向代理之后访问nacos控制台静