Nginx透传获取客户端IP地址

本文介绍了如何使用Nginx配置文件实现与Java后端的交互,通过设置代理规则来获取客户端的真实IP地址,并详细解释了获取客户端IP地址的Java代码实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

nginx.conf配置:

 

Java代码   收藏代码
  1. location / {   
  2.      proxy_pass http://127.0.0.1:8080/myweb/;  
  3.      proxy_redirect    off;  
  4.      proxy_set_header  Host             $host;  
  5.      proxy_set_header  X-Real-IP        $remote_addr;  
  6.      proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;  
  7. }  

 myweb后端获取方式:

 

Java代码   收藏代码
  1. /*** 
  2.  * 获取客户端IP地址;这里通过了Nginx获取;X-Real-IP, 
  3.  * @param request 
  4.  * @return 
  5.  */  
  6. public static String getClientIP(HttpServletRequest request) {  
  7.     String fromSource = "X-Real-IP";  
  8.     String ip = request.getHeader("X-Real-IP");  
  9.     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
  10.         ip = request.getHeader("X-Forwarded-For");  
  11.         fromSource = "X-Forwarded-For";  
  12.     }  
  13.     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
  14.         ip = request.getHeader("Proxy-Client-IP");  
  15.         fromSource = "Proxy-Client-IP";  
  16.     }  
  17.     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
  18.         ip = request.getHeader("WL-Proxy-Client-IP");  
  19.         fromSource = "WL-Proxy-Client-IP";  
  20.     }  
  21.     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
  22.         ip = request.getRemoteAddr();  
  23.         fromSource = "request.getRemoteAddr";  
  24.     }  
  25.     appLog.info("App Client IP: "+ip+", fromSource: "+fromSource);  
  26.     return ip;  
  27. }  

 参考: http://www.iteye.com/topic/1124492

### 配置 Nginx 实现 HTTPS 请求的 为了使 Nginx 能够处理并明转发 HTTPS 请求到上游服务器,需要设置特定的指令来确保 SSL/TLS 连接以及必要的头部信息被正确递给目标服务。以下是详细的配置方法: #### 1. 启用SSL监听端口和支持协议 定义 `server` 块用于监听443端口上的HTTPS流量,并指定证书路径。 ```nginx server { listen 443 ssl; # 设置域名 server_name example.com; # 加载SSL证书和私钥 ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; } ``` 此部分配置使得Nginx能够接受来自客户端的安全连接请求[^1]。 #### 2. 定义代理规则 为了让下游应用知道实际发起请求的是哪个客户端而不是Nginx本身,在转发之前应该修改一些HTTP头字段。这可以通过一系列 `proxy_set_header` 指令完成: ```nginx location / { proxy_pass http://upstream_server; # 将主机名递给后端服务器 proxy_set_header Host $host; # 记录真实的远程地址 proxy_set_header X-Real-IP $remote_addr; # 表明当前使用的协议为HTTPS proxy_set_header X-Forwarded-Proto https; # 添加或更新X-Forwarded-For列表中的IP地址 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ``` 这些设置不仅让后端应用程序可以获取原始客户端的信息,还保持了整个通信链路的安全性和一致性[^2]。 通过上述配置,当有HTTPS请求到达Nginx时,它会解密该请求并将未加密的数据发送至内部网络内的另一台Web服务器;同时保留所有重要的元数据以便后续处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值