Web服务器-Nginx流量镜像(Mirror)

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

图片

我们上一大章介绍了Kubernetes的知识,本章节我们进入中间件的讲解,这里会包含很多不同的类型组件,中间件的第一个大类我这里定义的是Web服务器。由于目前使用最广泛的Web服务器是Nginx,所以我们这里的讲解主要以Nginx服务器为主。

在实际的业务环境中,为了验证新功能等操作,需要引入一定的流量进行测试。但是手工模拟流量很难模拟真实的生产环境。所以就衍生出来一个需求就是把生产流量引入测试环境,他就是我们今天要讲的流量镜像功能。

把流量从生产引入到测试环境以后,就可以根据自己的对测试工作进行进一步细分,可做流量压测,蓝绿发布等操作。但是需要注意,这个会增加Nginx的负载压力。

下面就是我们使用Nginx的mirror功能来实现流量镜像功能。

# 定义主后端和镜像后端的服务
upstream primary_backend {
    server 192.168.31.121:8080;  
    keepalive 16;             # 保持长连接提升性能
}

upstream mirror_backend {
    server 192.168.31.121:9090;   #镜像服务器
    keepalive 16;
}

# 配置HTTP服务
server {
    listen 80;
    server_name 192.168.31.120; 

    #镜像请求使用单独的日志

    log_format mirror_log '$time_iso8601 [Mirror] "$request" '
                         'Sent to: $upstream_addr Status: $status';

    access_log /var/log/nginx/mirror.log mirror_log;


    # 配置流量镜像规则(镜像所有请求)
    location / {
        # 镜像配置
        mirror /mirror;               # 镜像请求发送到内部location
        mirror_request_body on;       # 复制请求体(支持POST/PUT)
        mirror_rate_limit 1000r/s;    # 限制镜像请求速率(按需调整)

        # 主请求代理配置
        proxy_pass http://primary_backend;
        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_send_timeout 10s;
        proxy_read_timeout 10s;
    }

    # 镜像请求的内部处理(不可外部访问)
    location = /mirror {
        internal;  # 关键!禁止直接访问此路径

        # 代理到镜像服务
        proxy_pass http://mirror_backend$request_uri;

        # 传递必要请求头
        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_set_header Authorization "";
        proxy_set_header Cookie "";

        # 快速失败策略(避免镜像服务拖累主服务)
        proxy_connect_timeout 2s;
        proxy_send_timeout 5s;
        proxy_read_timeout 5s;
        proxy_next_upstream error timeout invalid_header;
    }
}

这样配置以后,我们请求192.168.31.120,则请求会同时转发到后端服务器(正常响应反馈请求)的同时也会转发到我们镜像测试服务(只负责发请求,不管后续),而且由于我分别记录了日志,则两个方向都会记录日志。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值