nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP

nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP,第1张

首先,在前端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地

址的方法是:requestgetRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等

反向代理软件就不能获取到客户端的真实IP地址了。

但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。

@param request

@return

/

public static String getClientIp(HttpServletRequest request) {

String ip = requestgetHeader("x-forwarded-for");

//String ip = requestgetHeader("X-real-ip");

loggerdebug("x-forwarded-for = {}", ip);

if(ip == null || iplength() == 0 || "unknown"equalsIgnoreCase(ip)) {

ip = requestgetHeader("Proxy-Client-IP");

loggerdebug("Proxy-Client-IP = {}", ip);

}

if(ip == null || iplength() == 0 || "unknown"equalsIgnoreCase(ip)) {

ip = requestgetHeader("WL-Proxy-Client-IP");

loggerdebug("WL-Proxy-Client-IP = {}", ip);

}

if(ip == null || iplength() == 0 || "unknown"equalsIgnoreCase(ip)) {

ip = requestgetRemoteAddr();

loggerdebug("RemoteAddr-IP = {}", ip);

}

if(StringUtilsisNotBlank(ip)) {

ip = ipsplit(",")[0];

}

return ip;

}

}

//得到用户的浏览器名Stringuserbrowser=stnextToken();//得到用户的操作系统名Stringuseros=stnextToken();取得本机的信息也可以这样:操作系统信息SystemgetProperty(osversion);SystemgetProperty(osarch);瀏覽器:requestgetHeader(User-Agent)requestgetHeader(“User-agent”)返回客户端浏览器的版本号、类型getHeader(Stringname):获得http协议定义的传送文件头信息,requestgetMethod():获得客户端向服务器端传送数据的方法有GET、POST、PUT等类型requestgetRequestURI():获得发出请求字符串的客户端地址requestgetServletPath():获得客户端所请求的脚本文件的文件路径requestgetServerName():获得服务器的名字requestgetServerPort():获得服务器的端口号requestgetRemoteAddr():获得客户端的IP地址requestgetRemoteHost():获得客户端电脑的名字,若失败,则返回客户端电脑的IP地址requestgetProtocol():

1try catch

2request response session exception application servlet

3 建立数据库连接 , 向数据库发起请求 , 操作数据库返回结果

4Application

5sun

6javasqlDriver

7requestgetRemoteAddress();

10sun

1D

2C

3B

4CD

5D

6C

7A

8C

9C

16C

17D

18B

19B

JSP是一门基于JAVA语言的一种web应用开发技术,由JSP制作的动态网站具有非常好的跨平台性;所以对于做web开发的程序员来说,精到的掌握JSP的使用是极其重要的;在网络通信中,最常见的模式是B/S通信模式,即用户把需要获取的信息用浏览器向某个服务器发出请求,服务器使用web服务软件将用户的请求信息处理后发送给用户;所以使用jsp技术发送的请求就需要服务器端有相应的jsp引擎(即web服务软件)进行处理,jsp引擎有很多,下面使用有sun公司开发的开源的tomcat服务器来进行讲述;所以下面从tomcat服务器的安装开始讲起分为:一、tomcat的安装与配置;二、测试jsp页面;三、设置web服务目录三个方面来进行说明。

一:tomcat的安装与配置

这里默认jdk已经安装成功且环境变量已经设置为如下值:变量名Java_Home=E:\jdk180_45变量名Classpath=E:\jdk180_45\jre\lib\rtjar;,;变量名Path=E:\JDK180_45\BIN

安装tomcat有两种方式(一)apache-tomcat-6013zip文件的安装;(二)apache-tomcat-6013exe文件的安装下面只介绍第一种方式;

将apache-tomcat-6013zip文件解压到磁盘的某个分区下,如解压到E:\,将出现下面的目录结构

接下来双击bin目录下的startupbat文件,将会出现如下MS-DOS窗口表明已经启动了tomcat服务器,若不关闭该窗口该服务器将一直工作下去;

若双击后没有出现该界面或者只是闪烁了一下,一般是环境变量没有设置好;然后在浏览器的地址栏里输入http://localhost:8080或者http://127001:8080访问将出现下面的界面:

这里localhost和127000代表本主机,8080代表接受请求的端口号,tomcat默认使用该端口号,如果该端口号被占用将无法接受请求,需要在tomcat服务器的conf目录下的serverxml里更改端口号,方法如下:用记事本打开serverxml文件找到下面的部分将8080设置为要使用的端口号即可;但是建议不要使用1~1024之间的端口号以免与其他网络发生冲突,若端口号为80的端口没有被占用则可使用80的端口号,这样访问jsp页面时就可以省略端口号,如http://127001/firstjsp

第二种方式只需要双击apache-tomcat-6013exe文件安装即可,形成的目录和第一种方式一样;

二、测试jsp页面

用记事本编写如下firstjsp文件,以ANSI编码方式保存在web服务目录的根目录webapps\Root里,内容如下:

在地址栏里输入http://localhost:8080/firstjsp访问出现下面的界面:

三、设置web服务目录

在tomcat的webapps的文件夹下有如下内容,其中TOOT是tomcat的根目录,访问该目录下的jsp页面的内容时只需在浏览器的地址栏里输入ip地址、端口号、和jsp页面的名字即可(即省略web根目录的名字),如:http://localhost:8080/firstjsp;其他的文件夹是tomcat的服务目录,如果把firstjsp文件放到docs文件夹下,则在地址栏里要输入http://localhost:8080/docs/firstjsp才能找到该文件;

另外也可设置tomcat的虚拟目录来访问指定目录的jsp内容,比如想要访问e盘下soft文件夹里的内容但是为了隐藏该目录则要通过hello虚拟目录来访问;这时可以在serverxml文件里的</host>标签的上面加入下面的内容:

这样要访问e:/soft文件夹里的firstjsp文件就可以通过在地址栏里输入http://localhost:8080/hello/firstjsp来访问了;

这里再来说一下相对目录的问题,在web服务目录下的目录称为该web服务目录下的相对目录;若在文本的服务目录sun下有一个子目录moon,在moon目录下有一个文件ajsp,若需要访问该文件则需要在地址栏里输入http://120001:8080/sun/moon/ajsp来访问;另外web服务目录下的页面要访问相对目录下的jsp页面则要通过相对目录来访问,如sun服务目录下的bjsp页面要通过超链接来访问sun子目录moon下的ajsp则要使用moon/ajsp(注意不是/moon/ajsp;"/"是代表根目录,/moon/ajsp将代表moon是web的一个服务目录,而不是服务目录sun下的子目录);

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情