天翼云增强型弹性负载均衡ELB转发流量至nginx后无法获取客户端真实ip

如何获取来访者的真实IP?

1、nginx需要安装http_realip_module模块

wget http://nginx.org/download/nginx-1.17.0.tar.gz
tar zxvf nginx-1.17.0.tar.gz
cd nginx-1.17.0
./configure --user=www --group=www --prefix=/path/server/nginx --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module
make
make install
kill -USR2 `cat /path/server/nginx/logs/nginx.pid`
kill -QUIT `cat /path/server/nginx/logs/ nginx.pid.oldbin`

2、编辑nginx配置文件

vi /path/server/nginx/conf/nginx.conf
在http或者server处,需要添加的配置字段和信息:
set_real_ip_from 100.125.0.0/16;
real_ip_header X-Forwarded-For;

添加配置字段如下所示

[[email protected]_server_01 conf.d]# cat default.conf
server {

    listen      443 default ssl;
    server_name  localhost;

    set_real_ip_from 100.125.0.0/16;
    real_ip_header X-Forwarded-For;

3、重启nginx

nginx -s reload

4、查看Nginx的访问日志,您可以获取真实的来访者IP。

四层服务

注意:针对四层(TCP协议)服务,需要配置TOA插件获取。需要配置TOA插件获取。

操作场景

ELB可以针对客户访问的业务为访问者提供个性化的管理策略,制定策略之前需要获取来访者的真实IP。TOA内核模块主要用来获取ELB转化过的访问者真实IP地址(仅支持IPv4),该插件安装在ELB后端服务器。

当客户需要在操作系统中编译TOA内核模块时,可参考本文档进行配置。

Linux内核版本为2.6.32和Linux内核版本为3.0以上的操作系统,在配置TOA内核模块的操作步骤上有所区别,具体操作请参照相应的操作步骤进行配置。

前提条件
编译内核模块开发环境需与当前内核版本开发环境一致。
确保虚拟机可以访问开放源。
如果是非root用户,需拥有sudo权限。
操作步骤
以下操作步骤是针对Linux内核版本为3.0以上的操作系统。
准备编译环境。
说明:
安装内核模块开发包的过程中,如果源里面找不到对应内核版本的安装包,需要自行去网上下载需要的安装包。

以下是不同Linux发行版本的操作说明,请根据环境选择对应的方案。

CentOS环境下的操作步骤。
执行如下命令,安装gcc编译器。
sudo yum install gcc

执行如下命令,安装make工具。
sudo yum install make

执行如下命令,安装内核模块开发包,开发包头文件与库的版本需要与内核版本一致。
sudo yum install kernel-devel-`uname -r`

说明:
如果自带源里没有对应的内核开发包,可以到如下地址中去下载对应的rpm包。

地址:https://mirror.netcologne.de/oracle-linux-repos/ol7_latest/getPackage/

以3.10.0-693.11.1.el7.x86_64为例,下载后执行以下命令安装:

rpm -ivh kernel-devel-3.10.0-693.11.1.el7.x86_64.rpm。

 2、编译内核模块

编译内核模块
使用git工具,执行如下命令,下载TOA内核模块源代码。
git clone https://github.com/Huawei/TCP_option_address.git

说明:
如果未安装git工具,请进入以下链接下载TOA模块源代码。

https://github.com/Huawei/TCP_option_address

执行如下命令,进入源码目录,编译模块。
cd src

make

编译过程未提示warning或者error,说明编译成功,检查当前目录下是否已经生成toa.ko文件。

说明:
如果报错提示“config_retpoline=y but not supported by the compiler, Compiler update recommended”,表明gcc版本过老,建议将gcc升级为较新版本

加载内核模块
执行如下命令,加载内核模块。
sudo insmod toa.ko

执行如下命令,验证模块加载情况,查看内核输出信息。
dmesg | grep TOA

若提示信息包含“TOA: toa loaded”,说明内核模块加载成功。

说明:
CoreOS在容器中编译完内核模块后,需要将内核模块复制到宿主系统,然后在宿主系统中加载内核模块。由于编译内核模块的容器和宿主系统共享/lib/modules目录,可以在容器中将内核模块复制到该目录下,以供宿主系统使用。

推荐常用rpm包搜索网站:http://rpm.pbone.net/

这时候再次查看nginx日志,则可以正常获取到真实访问的ip地址

参考:https://support.huaweicloud.com/elb_faq/elb_faq_0090.html

原文地址:https://www.cnblogs.com/caidingyu/p/12101395.html

时间: 2024-10-09 19:35:17

天翼云增强型弹性负载均衡ELB转发流量至nginx后无法获取客户端真实ip的相关文章

nginx在varnish后端做负载均衡,后端tomca获取客户端真实IP

nginx在varnish后端做负载均衡,后端tomca获取客户端真实IP 1.设置nginx配置文件    首先要确定nginx做负载均衡,在安装时把http_realip_module 安装上了.    查看方法: /usr/local/nginx/sbin/nginx -V   配置nginx.conf    vim /usr/local/nginx/conf/nginx.conf   加入 set_real_ip_from 192.168.88.131;      重新加载nginx:

负载均衡的场景下ASP.NET Core如何获取客户端IP地址

在ASP.NET中,使用负载均衡时,可以通过ServerVariables获取客户端的IP地址. var ip = request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 但在ASP.NET Core中没有ServerVariables的对应实现,需要换一种方式,可以在HttpContext.Request.Headers中获取,需要注意的是key与ServerVariables方式不一样,ServerVariables中是"HTTP

什么是弹性负载均衡?

弹性负载均衡(Elastic Load Balance)将访问流量自动分发到多台云服务器,扩展应用系统对外的服务能力,实现更高水平的应用容错. 弹性负载均衡的应用多协议支持四层和七层多种协议可选,满足多样的业务场景.高可用保障提供多重的高可用防护策略,保障业务的服务质量.会话保持将一定时间内来自同一用户的访问请求,转发到同一后端云服务器处理,从而保证用户访问的连续性.弹性伸缩与弹性伸缩服务无缝集成,根据业务流量自动扩展负载分发和后端处理能力. 原文地址:https://www.cnblogs.c

DNS协议原理、安装及主从同步、负载均衡和转发、缓存的详细配置

DNS(域名系统),用于解析域名和IP地址之间的映射关系 协议使用端口: udp 53     正常查询解析情况下使用udp53 tcp53        当进行主从之间的区域传送时使用tcp53 DNS域的空间划分 DNS的查询方式 递归查询 当主机A要向DNS服务器发送查询主机D的请求时,服务器返回给A最终结果,这种方式就是递归查询,如果客户端要查找的内容直接在服务器上得到结果,刚给出的答案是一个权威答案,否则就是一个参考答案. 迭代查询 NS服务器接收到A的请求后,本地没有D的解析,则会通

云计算之路-阿里云上:负载均衡从七层换成四层后的意外发现

阿里云的负载均衡产品叫SLB,七层负载均衡用的是LVS+Tengine,四层负载均衡用的是LVS. 昨天七层SLB出现了波动,我们后来改用了四层SLB. 使用后意外地发现,用户请求的响应内容TCP出包走的是云服务器的公网网卡. 之前用七层SLB时流量走的都是内网网卡,再加上RDS.Memcached也走的是内网网卡,于是网络负载都集中在一块内网网卡,内网网卡IO成为了瓶颈.而公网网卡却闲置着,我们之前也曾想过要是将一部分网络负载让公网网卡分担该多好啊. 我们用物理服务器的时候,会把Web服务器上

当Kubernets遇上阿里云 -之七层负载均衡(一).

我们知道Kubernetes的service只能实现基于4层的负载均衡,无法提供7层之上的许多特性,诸如基于URL的负载均衡,SSL支持,三方授权等等:Ingress可以实现七层负载均衡的许多功能,唯一的遗憾就是无法提供一个固定的接入IP.想想当你为业务申请了一个域名后准备将域名绑定到IngressIP上的时候,却发现后端IP会时不时的变一下是怎样的心情.本文结合阿里云SLB为Kubernetes服务提供7层之上的负载均衡.本文假设您已经有一个支持阿里云的Kubernetes部署,参考. 本教程

搭建LVS负载均衡环境(keepalived+lvs+nginx)

LVS简介: LVS集群有DR.TUN.NAT三种配置模式,可以对www服务.FTP服务.MAIL服务等做负载均衡,下面通过搭建www服务的负载均衡实例,讲述基于DR模式的LVS集群配置 Director-Server: LVS的核心服务器,作用类似于一个路由器,含有为LVS功能完成的路由表,通过路由表把用户的请求分发给服务器组层的应用服务器(Real_Server),同时监控Real-servers ,在Real-Server不可用时,将其从LVS路由表中剔除,再恢复时,重新加入. Real-

三大主流负载均衡软件对比(LVS+Nginx+HAproxy)

LVS: 优点 : 1.抗负载能力强.性能高,能达到F5硬件的60%:对内存和cpu资源消耗比较低2.工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生.3.稳定性.可靠性好,自身有完美的热备方案:(如:LVS+Keepalived)4.应用范围比较广,可以对所有应用做负载均衡:5.支持负载均衡算法:rr(轮循).wrr(带权轮循).lc(最小连接).wlc(权重最小连接) 缺点: 1.不支持正则处理,不能做动静分离. 2.配置 复杂,对网络

nginx做负载均衡 tomcat获得客户端真实ip

因项目需要做tomcat2台机器的负载均衡,配置好负载环境后,发现tomcat的日志一律是我前置nginx代理服务器的ip 通过百度教材发现需要修改nginx的配置文件,修改代理头信息,传递给后方,后方进行获取即可. 类似教材网上很多.我经过试验也发现能用.大概的思路就行 nginx配置文件location /  处需要增加 proxy_set_header X-Real-IP $remote_addr;参数 然后tomcat 的配置文件server.xml日志定义那里需要增加%{X-Real-