原理:
squid,varnish以及nginx等,在做反向代理的时候,因为要代替客户端去访问服务器,所以,当请求包经过反向代理后,在代理服务器这里这个IP数据包的IP包头做了修改,最终后端web服务器得到的数据包的头部的源IP地址是代理服务器的IP地址,这样一来,后端服务器的程序给予IP的统计功能就没有任何意义,所以在做代理或集群的时候必须解决这个问题,这里,我以nginx做集群或代理的时候如何给后端web服务器保留(确切的说是传递)客户端的真实IP地址。
nginx实用X-Forwarded-For这个参数来解决这个问题我们用几个实例来解决
nginx.conf配置:
location / {
proxy_pass http://127.0.0.1:8080/myweb/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
java获取ip
/***
* 获取客户端IP地址;这里通过了Nginx获取;X-Real-IP,
* @param request
* @return
*/
public static String getClientIP(HttpServletRequest request) {
String fromSource = "X-Real-IP";
String ip = request.getHeader("X-Real-IP");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Forwarded-For");
fromSource = "X-Forwarded-For";
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
fromSource = "Proxy-Client-IP";
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
fromSource = "WL-Proxy-Client-IP";
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
fromSource = "request.getRemoteAddr";
}
appLog.info("App Client IP: "+ip+", fromSource: "+fromSource);
return ip;
}
分享到:
相关推荐
本文将详细介绍如何使用nginx扩展应用来获取访问者真实IP,主要是通过在七层上配置Apache服务器前端(负载均衡),将真实的IP放在X-Forwarded-For的字段里,然后在日志中记录真实IP地址。 一、七层 在七层上,我们...
因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。 同样适用于前端是 Squid 或者...
本文将深入探讨“Nginx做反向代理时如何获取真实IP”的主题,这对于网站日志分析、安全监控以及实现个性化服务至关重要。 Nginx是一款流行的开源HTTP服务器,常用于反向代理、负载均衡和缓存服务。反向代理是指...
服务器配置:在服务器配置中,需要配置 Nginx 的端口和 IP 地址,以确保服务器的安全性。 三、Nginx 配置方面 Nginx 配置方面是解决跨域问题的关键所在。以下是 Nginx 的配置示例: ``` server { listen 80; ...
本文将深入探讨“nginx代理前端服务”的配置和相关知识点。 首先,我们来看`nginx.conf`,这是Nginx的主要配置文件,包含了Nginx服务器的基本设置和全局指令。在配置Nginx代理前端服务时,我们需要关注以下几个核心...
对于Nginx,我们可能会创建一个Service,让其他应用或者外部网络可以通过特定的端口和IP地址访问。 在部署Nginx集群时,你需要编写以下YAML文件: 1. **nginx-deployment.yaml**:这个文件定义了Nginx的Deployment...
### Nginx 与前端 Vue 项目的部署 ...对于前端 Vue 项目来说,通过简单的几步配置即可将其部署到 Nginx 上,从而充分利用 Nginx 的高性能和稳定性。无论是对于个人开发者还是企业级项目,Nginx 都是值得考虑的选择。
Nginx以其高效的静态文件处理能力和良好的并发性能,常被用作前端服务器;而Apache则以其丰富的模块和强大的动态页面处理能力,作为后端服务器。本文将深入探讨如何配置Nginx前端和Apache后端的服务器,以及如何实现...
在f5的开发论坛上找到的,按开发者的话说,是为了解决iis放在f5后记录不到用户ip的问题,管他前端是f5还是nginx还是squid还是haproxy,都可以用。装完之后重启下iis即可。https://devcentral.f5.com/weblogs/J
通过使用Nginx的虚拟主机功能,可以在同一个IP地址和端口上,通过域名区分不同的网站。具体操作方法是在Nginx的配置文件中设置多个server块,每个server块的server_name指令指定一个域名。当有请求到达时,Nginx会...
总之,利用Nginx代理发布前端程序可以带来诸多优势,包括更快的响应速度、更好的安全性和易于扩展的架构。正确配置和使用Nginx是运维工作中的重要技能,对于提升Web服务的整体性能和用户体验具有积极影响。
在Windows环境下,安装和配置Nginx是一项基础且重要的任务,尤其对于开发和测试环境而言。Nginx是一款高性能的Web服务器和反向代理服务器,以其轻量级、高效的性能被广泛应用。本文将详细介绍在Windows上安装、配置...
### Vue前端项目部署之Nginx配置详解 #### 一、引言 随着前端技术的发展,Vue.js作为一款流行的前端框架被广泛应用于Web应用开发之中。对于开发者来说,如何将开发完成的应用部署到生产环境是必不可少的一环。本文...
在这个配置中,Nginx不仅将根URL `/` 的请求转发到8083端口(假设这是前端应用的地址),还将所有以`/rest`开头的请求转发到9803端口(假设这是后端API的服务地址)。`proxy_set_header`指令用于传递客户端的原始...
JavaScript在此场景中的作用可能是实现与Nginx服务器的交互,以及在前端展示摄像头的视频流。通常,我们会使用如HTML5的`<video>`标签结合MediaSource Extensions (MSE)和HLS或RTSP流来显示视频。JavaScript可以处理...
在本地实现IP地址信息查询,意味着我们需要在服务器上配置好环境,包括安装PHP运行环境(如PHP-FPM与Nginx或Apache),并将纯真IP数据库文件放到适当的位置。然后,编写PHP代码来读取数据库文件,通常会使用文件I/O...
这对于负载均衡、隐藏真实服务器IP、提升性能等场景非常有用。 配置反向代理时,我们需要在server块中使用proxy_pass指令: ```nginx location / { proxy_pass http://backend_server; } ``` 这里,`...
《Nginx学习丛书:Nginx应用与提高》是一套深入探讨Nginx服务器的教程,涵盖了Nginx在各种场景下的应用和优化。这套资料的目的是帮助读者全面理解和掌握Nginx的强大功能,提升其在实际工作中的效能。 1. **第3章 ...
在IT行业中,Nginx是一个广泛使用的高性能Web服务器和反向代理服务器,以其高效、稳定和轻量级的特性受到青睐。其中一个实用的功能是通过配置来映射本地文件,使得用户可以通过HTTP协议直接访问到服务器上的静态资源...
目前的项目网站架构中使用了F5和nginx,F5用来...还有一个重要原因是我们的nginx不在最前端,所以只能放弃使用ip_hash。上网搜索了一番,知道了nginx-sticky-module这个第三方模块可以基于cookie实现会话保持,决定试试