详情页标题前

阿里云负载均衡通过CLB七层监听获取客户端真实IP-云淘科技

详情页1

当使用CLB七层监听转发流量时,您可通过HTTP头部的X-Forwarded-For字段获取客户端真实IP地址。

获取方法介绍

七层负载均衡(HTTP或HTTPS协议)支持在HTTP头部的X-Forwarded-For字段保留客户端真实IP信息,服务器进行相应配置后即可获取到客户端真实IP地址。

X-Forwarded-For字段格式如下:

X-Forwarded-For: 

当使用此方式获取客户端真实IP时,获取的第一个地址就是客户端真实IP。

说明

CLB的HTTPS监听是在负载均衡服务上进行的加密控制,负载均衡服务与后端服务器之间使用的是HTTP协议。因此如果即使使用的是HTTPS监听,在后端服务器也只需配置HTTP协议。

操作步骤

前提条件

  • 您已经创建CLB实例并为该实例添加了七层监听。本文以HTTP监听、监听端口为80举例说明,具体操作,请参见创建和管理CLB实例、添加HTTP监听。

  • 您已经创建可用的CLB服务器组并添加了后端服务器。本文以创建了虚拟服务器组、后端协议为HTTP、后端服务器为ECS、后端应用端口为80举例说明,具体操作,请参见创建和管理虚拟服务器组。

步骤一:检查监听已开启通过X-Forwarded-For获取功能

  1. 登录传统型负载均衡CLB控制台。

  2. 在顶部菜单栏,选择实例所属的地域。

  3. 实例管理页面,找到目标实例,单击实例ID。

  4. 在实例详情页面,单击监听页签,找到目标七层监听,单击监听ID。

  5. 在监听详情页面,查看到附加HTTP头字段包括通过X-Forwarded-For头字段获取客户端真实IP

    说明

    CLB七层监听默认开启通过X-Forwarded-For头字段获取客户端真实IP功能,不支持关闭。

步骤二:配置后端服务器

请根据您所使用的服务器类型,选择对应的操作步骤。

配置Nginx服务器

此处以CentOS 7.9操作系统、Nginx 1.20.1 版本配置为例介绍。具体请以您实际使用的环境为准。

  1. 在服务器执行nginx -V | grep http_realip_module命令,检查Nginx服务器是否安装了http_realip_module模块。Nginx使用http_realip_module模块解析X-Forwarded-For记录。

    如果返回信息中包括--with-http_realip_module,表示已安装http_realip_module模块,可进行下一步。

    已安装http_realip_module模块返回信息示例

    nginx version: nginx/1.20.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
    built with OpenSSL 1.1.1k  FIPS 25 Mar 2021
    TLS SNI support enabled
    configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
    

    说明

    • Nginx 1.0.4 版本(2011年)开始支持http_realip_module 模块。如果您使用的Nginx版本过老,建议您备份配置数据并升级Nginx版本。

    • 如果未安装http_realip_module模块,需要重新编译安装Nginx并安装http_realip_module 模块。操作较为繁琐,建议您使用类似yum的包管理器安装Nginx。

  2. 修改Nginx服务配置文件并保存,修改点可参考下方说明。执行nginx -t命令查看配置文件所在路径,默认通常为 /etc/nginx/nginx.conf,具体请以实际环境为准。

    http {
      # 确保设置$http_x_forwarded_for,该变量用于记录X-Forwarded-For的值
      log_format  main  '$remote_addr- $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
      
      # ...
    }
    

  3. 执行sudo nginx -s reload命令,重新加载Nginx配置文件。

配置Apache服务器

此处以CentOS 7.9操作系统、Apache 2.4.6 版本配置为例介绍。具体请以您实际使用的环境为准。

  1. 在服务器执行httpd -M | grep remoteip_module命令,检查Apache服务器是否安装了remoteip_module模块。Apache使用remoteip_module模块解析X-Forwarded-For记录。

    如果返回信息中包括remoteip_module (shared),表示已安装该模块,可进行下一步。

    说明

    • Apache 2.4.0 版本(2012年)开始支持remoteip_module 模块。如果您使用的Apache版本过老,建议您备份配置数据并升级Apache版本。

    • 如果未安装remoteip_module 模块,需要重新编译安装Apache并安装remoteip_module 模块。操作较为繁琐,建议您使用类似yum的包管理器安装Apache。

  2. 修改Apache服务配置文件并保存,修改点可参考下方说明。默认通常为/etc/httpd/conf/httpd.conf,具体请以实际环境为准。

    # ...
    
    	# 增加%{X-Forwarded-For}i ,用于记录X-Forwarded-For信息
      LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
      LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b" common
    	#...
    
    # ...

  3. 执行sudo systemctl restart httpd命令,重启apache服务。

配置IIS服务器

此处以Windows Server 2016操作系统配置为例介绍。具体请以您实际使用的环境为准。

  1. 下载并解压F5XForwardedFor文件。

  2. 根据自己的服务器操作系统版本将x86\x64\目录下的F5XFFHttpModule.dllF5XFFHttpModule.ini拷贝到某个目录,确保IIS进程对该目录有读取权限。

  3. 服务器管理器中,打开IIS管理器

  4. 选中服务器,双击模块功能。

    阿里云负载均衡通过CLB七层监听获取客户端真实IP-云淘科技

  5. 单击配置本机模块,然后在弹出的对话框中,单击注册

    阿里云负载均衡通过CLB七层监听获取客户端真实IP-云淘科技

  6. 添加下载的.dll文件。

    1. 输入文件名称,选择路径之后,单击确定阿里云负载均衡通过CLB七层监听获取客户端真实IP-云淘科技

    2. 此时系统会自动选中新注册的模块,请单击确定阿里云负载均衡通过CLB七层监听获取客户端真实IP-云淘科技

  7. 回到服务器主页,双击日志模块,配置日志格式,在日志中记录X-Forwarded-For字段信息。

    1. 单击选择字段

      阿里云负载均衡通过CLB七层监听获取客户端真实IP-云淘科技

    2. 单击左下角添加字段,添加如下日志字段并确认。

      阿里云负载均衡通过CLB七层监听获取客户端真实IP-云淘科技

    3. 单击右上角应用,完成修改。

  8. 重启IIS服务器,等待配置生效。

步骤三:验证后端服务器已获取客户端真实IP

请根据您所使用的服务器类型,选择对应的操作步骤。

Nginx服务器

当Nginx作为后端服务器时,您可以通过检查Nginx日志来判断是否成功获取到了客户端的真实IP地址。

Nginx日志文件默认路径为:/var/log/nginx/access.log

每行日志中,$http_x_forwarded_for变量对应的字段中,第一个IP地址即为客户端真实IP地址。

阿里云负载均衡通过CLB七层监听获取客户端真实IP-云淘科技

Apache服务器

当Apache作为后端服务器时,您可以通过检查Apache日志来判断是否成功获取到了客户端的真实IP地址。

Apache日志文件默认路径为:/var/log/httpd/access_log

每行日志中,%{X-Forwarded-For}i 对应的字段中,第一个IP地址即为客户端真实IP地址。

阿里云负载均衡通过CLB七层监听获取客户端真实IP-云淘科技

IIS服务器

当IIS作为后端服务器时,您可以通过检查IIS日志来判断是否成功获取到了客户端的真实IP地址。

IIS日志文件路径,可在日志模块查看。

阿里云负载均衡通过CLB七层监听获取客户端真实IP-云淘科技

每行日志中,X-Forwarded-For对应的字段中,第一个IP地址即为客户端真实IP地址。

阿里云负载均衡通过CLB七层监听获取客户端真实IP-云淘科技

相关文档

不同负载均衡类型获取客户端真实IP方式有所不同:

  • 当您使用ALB时,可通过X-Forwarded-For字段获取客户端真实IP,可参考保留客户端真实源地址。

  • 当您使用NLB时,可通过服务器组客户端地址保持功能或开启Proxy Protocol功能获取客户端真实IP,可参考通过NLB获取客户端真实IP。

  • 当您使用CLB四层监听时,可通过直接获取或开启Proxy Protocol功能获取客户端真实IP,可参考通过CLB四层监听获取客户端真实IP。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/170014.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云日志服务SLS使用e_dict_map、e_search_dict_map函数进行数据富化-云淘科技

    本文介绍使用映射富化函数e_dict_map、e_search_dict_map进行数据富化的实践案例。 背景信息 日志服务数据加工映射富化函数包括普通映射函数和搜索映射函数,两者区别如下所示: 普通映射函数使用文本完全匹配方式来映射。普通映射函数包括e_dict_map函数和e_table_map函数,两者区别在于e_dict_map函数接收的是dict类…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云日志服务SLS日志字段详情-云淘科技

    本文介绍Nginx访问日志的字段详情。 字段 说明 __topic__ 日志主题,固定为nginx_access_log。 body_bytes_sent 发送给客户端的字节数,不包括响应头的大小。 host 请求地址,IP地址或域名。 http_referer URL跳转来源。 http_user_agent 客户端浏览器等信息。 http_x_forwa…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云容器服务ACK公共请求和返回结果-云淘科技

    本文列举了容器服务Kubernetes版的API的公共请求参数和公共返回参数信息。 公共请求参数 公共请求参数是用于标识目标API、用户身份、签名等通用信息的参数,每次发起API请求时均需要携带这些参数。 公共请求参数应作为HTTP请求的消息头(header)携带在请求中,具体取值如下: 名称 是否必须 描述 x-acs-action 是 API的名称。关于…

    阿里云容器服务 2023年12月10日
  • 阿里云日志服务SLS日志字段详情-云淘科技

    本文介绍Kubernetes Ingress访问日志的字段详情。 字段 说明 body_bytes_sent 发送给客户端的http body字节数。 client_ip 请求客户端IP地址。 host 优先从请求参数中获取host,如果获取不到则从host header取值,如果仍获取不到则以处理请求的后端服务器IP地址作为host。 http_refer…

    阿里云日志服务SLS 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云负载均衡如何处理健康检查导致的大量日志-云淘科技

    负载均衡的日志管理功能会自动保存三天内的健康检查日志,如果健康检查日志过多,对您的运维工作造成不便,本文以CLB为例为您介绍,您可以选择以下方案来减少或禁止某些场景下健康日志的产生。 说明 减少健康检查日志的数量可能会导致您无法及时发现负载均衡实例运行时所出现的问题,请您谨慎权衡每种方案所带来的风险,根据您的实际情况进行选择。 获取访问日志 调整健康检查频率…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。