背景:
公司所有的域名都是通过F5机器设置,其用户请求也都是通过F5转发,项目某些请求需要限制访问,加上运维没有配置F5透传ip功能,故准备在nginx上配置reaIp模块,获取用户真实的ip。
F5代理转发,或者CDN代理转发之后的请求,获取到的ip一般都是F5的或者CDN的ip地址,其真实ip往往隐藏在请求中。
1,配置realIP模块
默认不会编辑进Nginx
通过--with-http_realip_module启用功能
2,指令解释
Syntax: set_real_ip_from address | CIDR | unix:;
Default: —
Context: http, server, location
#set_real_ip_from:真实服务器上一级代理的IP地址或者IP段,可以写多行
Syntax: real_ip_header field | X-Real-IP | X-Forwarded-For | proxy_protocol;
Default: real_ip_header X-Real-IP;
Context: http, server, location
#real_ip_header:从哪个header头检索出要的IP地址
Syntax: real_ip_recursive on | off;
Default: real_ip_recursive off;
Context: http, server, location
#real_ip_recursive:递归排除IP地址,ip串从右到左开始排除set_real_ip_from里面出现的IP,如果出现了未出现这些ip段的IP,那么这个IP将被认为是用户的IP。
3,透传ip到服务器上
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
增加一个$proxy_add_x_forwarded_for到X-Forwarded-For里去,注意是增加,而不是覆盖,当然由于默认的X-Forwarded-For值是空的,所以我们总感觉X-Forwarded-For的值就等于$proxy_add_x_forwarded_for的值,实际上当你搭建两台nginx在不同的ip上,并且都使用了这段配置,那你会发现在web服务器端通过request.getAttribute("X-Forwarded-For")获得的将会是客户端ip和第一台nginx的ip
4,具体nginx的配置
set_real_ip_from 10.10.1.1;
set_real_ip_from 10.10.1.2;
set_real_ip_from 10.10.1.3;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
location /rest {
allow 1.1.1.1;
allow 2.2.2.2;
deny all;
proxy_pass http://ecs-rest;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100m;#允许客户端请求的最大单文件字节数
client_body_buffer_size 128k;#缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90;#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90;#后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90;#连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k;#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k;#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k;#高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
相关推荐
### 获取客户端真实IP(支持代理服务器) #### 一、背景介绍 在Web开发过程中,有时候我们需要获取客户端的真实IP地址,特别是在涉及到用户地理位置定位、安全控制等场景时尤为重要。然而,在实际应用中,很多情况...
### Java获取客户端真实IP的两种方法详解 #### 一、问题背景 在Web开发中,经常需要获取客户端的真实IP地址来进行一系列的操作,比如统计访问来源、进行地理定位、安全防护等。然而,在实际应用场景中,客户端请求...
Java获取客户端真实IP ...在Java中获取客户端真实IP需要使用X-Real-IP和X-Forwarded-For请求头,并在nginx配置文件中添加相应的配置。这样,我们就可以获取客户端的真实IP,并实现分享功能的地区辨识功能。
当涉及到通过代理服务器或者负载均衡器(如Nginx)进行TCP转发时,获取用户的真实IP地址可能会变得复杂。在标题“java socket nginx tcp转发 用户真实IP测试”中,主要探讨的是如何在Java的Socket连接中,通过Nginx...
然而,在某些情况下,如通过反向代理服务器(如Nginx、Apache)或负载均衡器访问时,这个方法可能返回的是代理服务器的IP而非客户端的真实IP。这时,我们需要检查X-Forwarded-For头部,该头部通常包含了客户端的IP...
在IT行业中,尤其是在Web开发领域,获取客户端的IP地址是一项常见的任务。这有助于跟踪用户行为、提供地域针对性的服务,甚至进行安全防护。本篇文章将详细解释如何在Java环境下,通过Servlet和Reactive编程模型来...
通过以上几种方法,可以有效地解决CDN环境下获取客户端真实IP的问题。对于网站管理员来说,了解并掌握这些技术对于优化用户体验、加强安全防护等方面都具有重要意义。同时,随着技术的发展,未来还可能出现更多高效...
在开发工作中,我们常常需要获取客户端的IP。一般获取客户端的IP地址的方法是:request.getRemoteAddr();但是在通过了Apache,Squid等反向代理软件不能获取到客户端的真实IP地址了。 原因:由于在客户端和服务之间...
本文将深入探讨“Nginx做反向代理时如何获取真实IP”的主题,这对于网站日志分析、安全监控以及实现个性化服务至关重要。 Nginx是一款流行的开源HTTP服务器,常用于反向代理、负载均衡和缓存服务。反向代理是指...
需要注意的是,当客户端通过Nginx等反向代理服务器连接到应用服务器时,此方法获取的将是反向代理服务器的IP地址而非客户端真实IP。 ### 处理多层代理的情况 在实际部署中,客户端的请求可能经过多层代理服务器...
在Web开发过程中,获取客户端的真实IP地址是一项非常重要的功能,尤其是在需要根据用户地理位置进行服务定制、防止恶意...以上就是关于如何在不同的PHP环境中准确获取客户端真实IP地址的方法介绍。希望对您有所帮助!
首先,`$_SERVER['REMOTE_ADDR']`是PHP用于获取客户端(浏览器)IP地址的一个变量,按照HTTP协议,这是服务器接收到的请求头中的信息。然而,如果用户访问你的网站经过了代理服务器或者负载均衡器,这个IP地址可能会...
$_SERVER[‘HTTP_X_REAL_IP’]:nginx 代理模式下,获取客户端真实IP /** * 获取客户端IP地址 */ function real_ip() { $ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_X_FORWARDE
例如,`proxy_protocol`可以启用Nginx与上游服务器之间的代理协议,以便获取客户端的真实IP;`proxy_set_header`可以设置传递给后端服务器的头部信息。 总之,Nginx的TCP代理转发功能使得我们可以利用其强大的性能...
主要介绍了Java中使用HttpRequest获取用户真实IP地址,使用本文方法可以避免Apache、Squid、nginx等反向代理软件导致的非真实IP地址,需要的朋友可以参考下
解决该问题,需要在Nginx反向代理配置中添加一些配置信息,目的将客户端的真实IP和域名传递到应用程序中。同时,也要修改获取IP地址的方法。 但是需要注意的是,通过Nginx反向代理后,如果访问IP通过了几层代理,...
然而,由于数据传输的路径经过多个CDN节点,这使得在CDN环境下获取用户的真实IP地址变得复杂。 "CDN下真实ip查询器"是一个专门针对这种情况设计的工具,它的主要功能是穿透CDN服务,准确地识别出用户的原始IP地址。...
这样,Nginx将会把客户端的IP地址传递给FastCGI进程,从而确保Django能够正确获取到用户的IP。这个设置使得`request.META`中的`REMOTE_ADDR`头包含了正确的用户IP,即使在使用反向代理的情况下也能正常工作。 总结...
然而,在这种配置下,记录来访者的真实IP(访客IP)可能会变得复杂,因为Nginx作为中间层会接收到请求,并将其转发到实际处理请求的Web服务器。这可能导致Web服务器只看到Nginx的IP而不是用户的IP。为了解决这个问题...