nginx || realip模块、健康检查

后端的real server不知道前端真正访问的ip地址,只知道负载均衡器的ip地址,如何让后端的real server知道前端真正的用户的ip地址?

解决方法1:后端real server不使用realip模块

步骤1:在负载均衡器上修改http请求报文头部字段,添加一个X-Real-IP字段

server {
    listen       80;
    server_name  www.sc.com;
    location / {
            proxy_pass http://myweb;
            proxy_set_header   X-Real-IP        $remote_addr;
       }

}

将nginx内部的remote_addr这个变量的值,赋值给X-Real-IP这个变量,X-Real-IP这个变量会在http协议的请求报文里添加一个X-Real-IP的字段,后端的real server 服务器上的nginx就可以读取这个字段的值。

X-Real-IP  这个变量名可以自己定义,随便取名,后面引用的时候,不区分大小写。

步骤2:在后端real server上使用这个x_real_ip这个字段

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr -  $HTTP_X_REAL_IP - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

access_log  logs/access.log  main;

}

在主配置文件nginx.conf里的日志部分调用这个变量,获取x_real_ip的值

变量名不区分大小写($HTTP_X_REAL_IP、$http_x_real_ip)

解决方法2:后端real server使用realip模块

realip模块的作用是:当本机的nginx处于一个反向代理的后端时获取到真实的用户IP。

给后端(backend)服务器使用的。

前提条件,需要在后端(backend)服务器上在编译安装nginx的时候,开启 --with-http_realip_module 功能,如果没有开启,需要重新编译安装nginx。

步骤1:在负载均衡器上修改http请求报文头部字段,添加一个X_REAL_IP字段

  server {
        listen       80;
        server_name  www.sc.com;
        location / {
                proxy_pass http://myweb1;
                proxy_set_header   X-Real-IP       $remote_addr;
           }

    }

将nginx内部的remote_addr这个变量的值,赋值给X-Real-IP这个变量,X-Real-IP这个变量会在http协议的请求报文里添加一个X-Real-IP的字段,后端的real server 服务器上的nginx就可以读取这个字段的值。

X-Real-IP  这个变量名可以自己定义,随便取名,后面引用的时候,不区分大小写。

步骤2:在后端real server上使用set_real_ip_from 192.168.0.160

server{
           listen 80;
           set_real_ip_from 192.168.0.160;
}

set_real_ip_from 192.168.0.160  # 告诉本机的nginx ,192.168.0.160 是负载均衡器,不是真正的client。

健康检查(Health Checks)

两种方式

Active Health Checks  主动的健康检查,LB每隔一段时间就去检查下后端的real server的状态,不管是否有client发请求过来,都会去检查。

server {
    location / {
        proxy_pass   http://backend;
        health_check port=80;   # 指定检测的端口号
    }
}

location / {
    proxy_pass http://backend;
    health_check interval=10 fails=3 passes=2;  # 每隔10秒去检查一次后端的real server, 失败的次数到达3次的时候,就标识这台上游服务器不可用,如果连续2次又可用访问了,就标识这台上游的服务器为up(可用)
    # 主动检查:默认的失败次数是1次,默认的时间间隔是5秒,默认只要能成功访问一次就认为服务器up 了

}

需要安装nginx plus(需要购买)

Passive Health Checks  被动的健康检查: 当client发请求给LB,然后LB再去转发请求给后端的real server ,这个时候如果后端的服务器出现问题,LB就发现了。被客户机逼着去检查后端的real server。

参数

fail_timeout –设置必须多次尝试失败才能将服务器标记为不可用的时间,以及将服务器标记为不可用的时间(默认为10秒)。

max_fails –设置在fail_timeout服务器标记为不可用的时间内必须发生的失败尝试次数(默认为1次尝试)。

backup 备份:当其他的服务器都不提供服务的时候,再启用这台服务器提供服务。

slow_start  慢启动

down   将上游的服务器标识为不可用,不会再发送任何的请求给这台服务器。

upstream backend {
	server backend1.example.com;
	server backend2.example.com max_fails=3 fail_timeout=30s;
}


upstream backend {
	server backend1.example.com slow_start=30s;
	server backend2.example.com backup;
	server backend3.example.com;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩未零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值