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

简介:

如果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,如需转载请自行联系原作者



相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
2月前
|
弹性计算 运维 监控
slb后端服务器组(Backend Server Group)关联
阿里云SLB的后端服务器组提供逻辑分组、精细化路由、端口隔离、权重分配与会话保持等功能,便于资源管理、流量控制和故障隔离。通过监听规则、健康检查、标签和API关联,实现灵活的后端资源配置,适应多变的业务需求,确保服务稳定性和资源利用率。
20 1
|
28天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
38 0
|
1月前
|
负载均衡 应用服务中间件 API
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
44 4
|
12天前
|
前端开发 数据处理 API
后端开发:构建稳健与高效的服务器逻辑
后端开发:构建稳健与高效的服务器逻辑
|
7天前
|
弹性计算 运维 Shell
后端服务器一键上下线
【4月更文挑战第30天】
5 1
|
13天前
|
JSON JavaScript 前端开发
服务器通信:使用WebSocket与后端实时交互
【4月更文挑战第24天】WebSocket为解决服务器与客户端实时双向通信问题而生,常用于聊天、游戏和实时通知等场景。本文通过4步教你实现WebSocket通信:1) 客户端使用JavaScript创建WebSocket连接;2) 监听`open`、`message`和`close`事件;3) 使用`send`方法发送数据;4) 使用`close`方法关闭连接。服务器端则需处理连接和数据发送,具体实现依后端技术而定。WebSocket为现代Web应用的实时交互提供了强大支持。
|
18天前
|
小程序 开发者
体验版小程序为何无法访问云端服务器后端接口(请求失败...(已完美解决附加图片))?
体验版小程序为何无法访问云端服务器后端接口(请求失败...(已完美解决附加图片))?
16 0
|
18天前
|
负载均衡 应用服务中间件 nginx
Nginx 负载均衡
Nginx 负载均衡
23 2
|
28天前
|
应用服务中间件 nginx
nginx进行反向代理的配置
在Nginx中设置反向代理的步骤:编辑`/etc/nginx/nginx.conf`,在http段加入配置,创建一个监听80端口、服务器名为example.com的虚拟主机。通过`location /`将请求代理到本地3000端口,并设置代理头。保存配置后,使用`sudo nginx -s reload`重载服务。完成配置,通过example.com访问代理服务器。
27 0
|
2月前
|
弹性计算 负载均衡
slb添加后端服务器
阿里云SLB服务用于流量分发,提升系统可用性和响应速度。添加ECS实例到SLB的步骤包括:登录控制台,选择“弹性计算”->“负载均衡”,找到目标SLB实例,进入详情页,点击“添加后端服务器”。挑选ECS实例,可按ID、名称或标签筛选,设置权重(默认100),并确保ECS实例状态正常,与SLB在同一地域,安全组允许SLB连接。添加后可考虑配置健康检查等高级选项。
16 1