nginx做反向代理负载均衡 后端服务器如何获取用户的IP

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

如果web程序需要获取用户IP的时候,通常使用了

HTTP_X_FORWARDED_FOR 和REMOTE_ADDR来获取。


1
2
3
4
5
6
7
dim realIP
If Request.ServerVariables("HTTP_X_FORWARDED_FOR")="" Then
realIP=Request.ServerVariables("REMOTE_ADDR")
Else
realIP=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
Response.write(realIP)

HTTP_X_FORWARDED_FOR 是http头传递过来的变量,如果用户用了代理,则该值取回来后为用户IP,代理服务器IP,(如果代理把用户IP传递过来的话。)

REMOTE_ADDR 是web服务器的socket里去回来的变量

如果web服务器在nginx的后端,

那么web程序取回来的REMOTE_ADDR 就是nginx服务器的IP了,

在nginx中 配置

1
2
3
4
5
6
7
location location ~*\.(aspx|ashx|asp)$
{
.....
        proxy_set_header X-forwarded- for  $proxy_add_x_forwarded_for;
        proxy_set_header X-real-ip $remote_addr;
....
}

把nginx上取到的$proxy_add_x_forwarded_for的值添加到X-forwarded-for(http header http_x_forwarded)

把nginx上取到的$remote_addr的值给X-real-ip(htpp_x_real_ip)

$proxy_add_x_forwarded_for  是HttpProxyModule模块的变量;

引用官方解释

Contains client request-header "X-Forwarded-For" with separated by comma $remote_addr. If there is no X-Forwarded-For request-header, than $proxy_add_x_forwarded_for is equal to $remote_addr

如果没有这个请求头的话,$proxy_add_x_forwarded_for的值为$remote_addr

$remote_addr 是ngx_http_core_module的变量,为client的值,


nginx做了如上设置后,web端再用

IP1=Request.ServerVariables("HTTP_X_FORWARDED_FOR"))


IP2=Request.ServerVariables("HTTP_X_REAL_IP")

就能取回来了,当然 如果用户在没有使用http代理的情况下这2个值相等






      本文转自天山三害 51CTO博客,原文链接:http://blog.51cto.com/skybug/1343291,如需转载请自行联系原作者



相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
18天前
|
弹性计算 监控 负载均衡
|
1月前
|
Java 关系型数据库 API
探索后端技术:构建高效、可靠的服务器端应用
在当今数字化时代,后端技术是任何成功应用程序的基石。它涉及服务器、数据库和应用程序之间的交互,处理数据存储、业务逻辑和系统性能等关键任务。本文将深入探讨后端开发的核心概念、常见技术栈及其实际应用,帮助读者更好地理解和掌握构建高效、可靠后端系统的技巧与策略。
|
1月前
|
监控 中间件 Java
后端技术:构建高效、稳定的服务器端应用
【10月更文挑战第5天】后端技术:构建高效、稳定的服务器端应用
79 0
|
1月前
|
监控 关系型数据库 Serverless
探索后端技术:构建高效、可靠的服务器端应用
本文将深入探讨后端开发的核心概念和关键技术,从服务器架构到数据库管理,再到安全防护,为读者提供全面的后端技术指南。无论是初学者还是经验丰富的开发者,都能从中汲取灵感,提升自己的技术水平。
|
2天前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
13 4
|
22天前
|
监控 负载均衡 算法
slb管理后端服务器
【10月更文挑战第18天】
21 5
|
23天前
|
关系型数据库 API 数据库
后端开发的艺术:从零到一构建高效服务器
在数字化时代,后端开发是支撑现代互联网应用的基石。本文旨在探讨后端开发的核心概念、关键技术以及如何构建一个高效的服务器。我们将从基础的编程语言选择开始,逐步深入到数据库设计、API开发和性能优化等关键领域。通过实际案例分析,我们将揭示后端开发的复杂性和挑战性,同时提供实用的解决方案和最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启发。
|
1月前
|
监控 Serverless API
利用云函数实现后端服务的无服务器化
【10月更文挑战第7天】本文介绍了无服务器架构中的核心组件——云函数,探讨了其概念、优势及应用。云函数使开发者能在无需管理服务器的情况下运行代码,具备自动扩展、成本效益、快速迭代和聚焦业务逻辑等优势。文章还详细说明了实施云函数的步骤,并分享了实战技巧,旨在帮助读者更好地理解和应用这一技术。
|
1月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
53 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
2月前
|
存储 关系型数据库 API
深入理解后端技术:构建高效、可扩展的服务器端应用
本文将探讨后端开发的核心概念和技术,包括服务器端编程、数据库管理、API设计和安全性等方面。通过深入浅出的方式,让读者了解如何构建高效、可扩展的后端系统。我们将从基本的后端框架开始,逐步深入到高级主题,如微服务架构和容器化部署。无论您是初学者还是有经验的开发人员,都能在本文中找到有价值的信息和实用的建议。
下一篇
无影云桌面