Nginx透传获取客户端IP地址

本文介绍了一个Nginx配置示例及其如何与后端应用配合来正确获取客户端的真实IP地址。通过Nginx代理设置,后端可以通过特定头字段获取到原始客户端IP,这对于日志记录和安全验证非常重要。

nginx.conf配置:

 

location / { 
     proxy_pass http://127.0.0.1:8080/myweb/;
     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;
}

 myweb后端获取方式:

 

/***
 * 获取客户端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;
}

 参考: 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服务器;同时保留所有重要的元数据以便后续处理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值