`
liang100100
  • 浏览: 37205 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

Nginx如何保留真实IP和获取前端IP

 
阅读更多
原理:
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.docx

    本文将详细介绍如何使用nginx扩展应用来获取访问者真实IP,主要是通过在七层上配置Apache服务器前端(负载均衡),将真实的IP放在X-Forwarded-For的字段里,然后在日志中记录真实IP地址。 一、七层 在七层上,我们...

    Nginx作为反向代理时传递客户端IP的设置方法

    因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。 同样适用于前端是 Squid 或者...

    nginx做反向代理时的真实IP_nginx反向代理_

    本文将深入探讨“Nginx做反向代理时如何获取真实IP”的主题,这对于网站日志分析、安全监控以及实现个性化服务至关重要。 Nginx是一款流行的开源HTTP服务器,常用于反向代理、负载均衡和缓存服务。反向代理是指...

    nginx跨域问题,解决多端口,多ip问题

    服务器配置:在服务器配置中,需要配置 Nginx 的端口和 IP 地址,以确保服务器的安全性。 三、Nginx 配置方面 Nginx 配置方面是解决跨域问题的关键所在。以下是 Nginx 的配置示例: ``` server { listen 80; ...

    nginx代理前端服务

    本文将深入探讨“nginx代理前端服务”的配置和相关知识点。 首先,我们来看`nginx.conf`,这是Nginx的主要配置文件,包含了Nginx服务器的基本设置和全局指令。在配置Nginx代理前端服务时,我们需要关注以下几个核心...

    k8s下部署nginx集群,以及相关yaml文件的编写和说明

    对于Nginx,我们可能会创建一个Service,让其他应用或者外部网络可以通过特定的端口和IP地址访问。 在部署Nginx集群时,你需要编写以下YAML文件: 1. **nginx-deployment.yaml**:这个文件定义了Nginx的Deployment...

    web服务器nginx+部署前端vue项目

    ### Nginx 与前端 Vue 项目的部署 ...对于前端 Vue 项目来说,通过简单的几步配置即可将其部署到 Nginx 上,从而充分利用 Nginx 的高性能和稳定性。无论是对于个人开发者还是企业级项目,Nginx 都是值得考虑的选择。

    配置Nginx前端Apache后端服务器

    Nginx以其高效的静态文件处理能力和良好的并发性能,常被用作前端服务器;而Apache则以其丰富的模块和强大的动态页面处理能力,作为后端服务器。本文将深入探讨如何配置Nginx前端和Apache后端的服务器,以及如何实现...

    让iis记录nginx反向代理的真实ip

    在f5的开发论坛上找到的,按开发者的话说,是为了解决iis放在f5后记录不到用户ip的问题,管他前端是f5还是nginx还是squid还是haproxy,都可以用。装完之后重启下iis即可。https://devcentral.f5.com/weblogs/J

    详解nginx同一端口监听多个域名和同时监听http与https

    通过使用Nginx的虚拟主机功能,可以在同一个IP地址和端口上,通过域名区分不同的网站。具体操作方法是在Nginx的配置文件中设置多个server块,每个server块的server_name指令指定一个域名。当有请求到达时,Nginx会...

    nginx 代理发布前端程序

    总之,利用Nginx代理发布前端程序可以带来诸多优势,包括更快的响应速度、更好的安全性和易于扩展的架构。正确配置和使用Nginx是运维工作中的重要技能,对于提升Web服务的整体性能和用户体验具有积极影响。

    Windows下nginx的安装、配置和使用1

    在Windows环境下,安装和配置Nginx是一项基础且重要的任务,尤其对于开发和测试环境而言。Nginx是一款高性能的Web服务器和反向代理服务器,以其轻量级、高效的性能被广泛应用。本文将详细介绍在Windows上安装、配置...

    vue前端项目部署之nginx配置.md

    ### Vue前端项目部署之Nginx配置详解 #### 一、引言 随着前端技术的发展,Vue.js作为一款流行的前端框架被广泛应用于Web应用开发之中。对于开发者来说,如何将开发完成的应用部署到生产环境是必不可少的一环。本文...

    Nginx端口映射配置方法

    在这个配置中,Nginx不仅将根URL `/` 的请求转发到8083端口(假设这是前端应用的地址),还将所有以`/rest`开头的请求转发到9803端口(假设这是后端API的服务地址)。`proxy_set_header`指令用于传递客户端的原始...

    nginx-1.10.2_海康;javascript_nginx/1.10.2_nginx转发海康_

    JavaScript在此场景中的作用可能是实现与Nginx服务器的交互,以及在前端展示摄像头的视频流。通常,我们会使用如HTML5的`<video>`标签结合MediaSource Extensions (MSE)和HLS或RTSP流来显示视频。JavaScript可以处理...

    PHP利用纯真IP数据库在本地实现IP地址信息查询(无乱码)

    在本地实现IP地址信息查询,意味着我们需要在服务器上配置好环境,包括安装PHP运行环境(如PHP-FPM与Nginx或Apache),并将纯真IP数据库文件放到适当的位置。然后,编写PHP代码来读取数据库文件,通常会使用文件I/O...

    Nginx配置文件——一级域名、二级域名

    这对于负载均衡、隐藏真实服务器IP、提升性能等场景非常有用。 配置反向代理时,我们需要在server块中使用proxy_pass指令: ```nginx location / { proxy_pass http://backend_server; } ``` 这里,`...

    Nginx学习丛书 Nginx应用与提高

    《Nginx学习丛书:Nginx应用与提高》是一套深入探讨Nginx服务器的教程,涵盖了Nginx在各种场景下的应用和优化。这套资料的目的是帮助读者全面理解和掌握Nginx的强大功能,提升其在实际工作中的效能。 1. **第3章 ...

    nginx 映射本地文件

    在IT行业中,Nginx是一个广泛使用的高性能Web服务器和反向代理服务器,以其高效、稳定和轻量级的特性受到青睐。其中一个实用的功能是通过配置来映射本地文件,使得用户可以通过HTTP协议直接访问到服务器上的静态资源...

    nginx-goodies-nginx-sticky-module-ng-s12451asdasd

    目前的项目网站架构中使用了F5和nginx,F5用来...还有一个重要原因是我们的nginx不在最前端,所以只能放弃使用ip_hash。上网搜索了一番,知道了nginx-sticky-module这个第三方模块可以基于cookie实现会话保持,决定试试

Global site tag (gtag.js) - Google Analytics