「反向代理java」反向代理内网穿透

博主:adminadmin 2023-01-13 05:12:08 364

本篇文章给大家谈谈反向代理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和反向代理内网穿透的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。