「反向代理java」反向代理内网穿透
本篇文章给大家谈谈反向代理java,以及反向代理内网穿透对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP
首先,在前端nginx上需要做如下配置:
location /
proxy_set_hearder host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header X-real-ip $remote_addr;
};
nginx会在把请求转向后台real-server前把http报头中的ip地址进行替换;这样操作完成后,real-server也需要做一些操作;
public class ClientIPUtils {
/**
* 在很多应用下都可能有需要将用户的真实IP记录下来,这时就要获得用户的真实IP地址,在JSP里,获取客户端的IP地
* 址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等
* 反向代理软件就不能获取到客户端的真实IP地址了。
* 但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。
* @param request
* @return
*/
public static String getClientIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
//String ip = request.getHeader("X-real-ip");
logger.debug("x-forwarded-for = {}", ip);
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
logger.debug("Proxy-Client-IP = {}", ip);
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
logger.debug("WL-Proxy-Client-IP = {}", ip);
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
logger.debug("RemoteAddr-IP = {}", ip);
}
if(StringUtils.isNotBlank(ip)) {
ip = ip.split(",")[0];
}
return ip;
}
}
Nginx 反向代理后,出现400的response_code
现象
开发人员反馈,测试环境某个接口全是返回400,具体开始出现的时间未知了,但目前全是400
接口情况
浏览器---Nginx-- Java 进程
排查过程
使用负载均衡地址localhost:9090/server_single/xxx 能看到抓到的请求头如下
使用服务器真实地址 能看到的请求头如下
查看到负载均衡模式下,请求头的Host: server_single 引起我的注意,猜想难道是因为Host 请求头的原因导致的400?,于是下面开始验证
接口如愿的返回了400的状态码,验证了我们的猜想
于是随便修改了几个 Host 字段常识,发现带下划线的都有问题,于是询问开发接口框架是否做了升级,回答说确实spring-boot 做了升级,所以基本确定就是这个原因。
解决办法
在nginx的location段增加配置 proxy_set_header Host $host ,修改反向代理nginx到真实Java接口请求时的Http header 。
结论
response_code = 400 表示客户端请求异常服务器,有可能是invalid hostname 也可能是其他 http header 导致服务器端无法正常解析。
java实现https反向代理,提示浏览器版本低
更新即可。java实现https反向代理,提示浏览器版本低更新即可。反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器。
关于反向代理java和反向代理内网穿透的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。