Nginx_反向代理配置讲解

刚才简单说了一下正则怎么去写,然后写这个是为了干什么事,让你有一个最初印象,说一下nginx一个很关键的话题,也很简单,

这个问题就是反向代理和upstream负载均衡

这个其实是很简单的,那咱们看这块,Nginx的反向代理用这个proxy和负载均衡upstream,所谓的反向代理其实是很简单的,

咱们的request请求,之前是直接访问咱们的tomcat,之前可能直接访问咱们的tomcat服务器,现在不去直接访问他了,怎么去做啊,

现在我们是这么去做,我们访问nginx服务器,访问的是nginx服务器,然后在nginx里面配置好了一个代理,就是我这个请求先通过

nginx拦截一下,然后利用nginx再给我写到一个位置,这个后端的服务器可能是APACHE,可能是tomcat,都可以,比如咱们就来tomcat,

也可以代理到tomcat2,也可以代理到tomcat3,这种多的形式就是负载均衡了,这里可以配置一些权重啊,主备啊,都可以,其实这些配置

都是很简单的,那咱们现在就看proxy,反向代理,就相当于我的请求交给nginx,nginx帮我转发给后端的tomcat服务器,然后tomcat响应

给nginx服务器,中间倒把手,看看怎么去做,其实这个东西是很easy的,咱们vim conf/nginx.conf,咱们就看上面的70,就是最上面的70

这块,对他进行一个简单的配置,你比如说,我这里面其实也会有这个配置,我怕我这个写错了,有一个代理的路径

		#配置反向代理tomcat服务器:拦截.jsp结尾的请求转向到tomcat
        #location ~ \.jsp$ {
        #    proxy_pass http://192.168.1.171:8080;
        #}	
	
我把这个copy一下,啥也不用管,下面的server就不用管了,咱们不去访问他不就行了,咱们就去关注70的server,监听的是70这个

server,这里面是有一个location的,我现在再写一个location,在这儿再写一个location,这里面就写这几句话

你看这儿,这不就是动静分离吗,你只要访问我的域名,当然我这里是localhost,你访问我70端口的时候,请求是不是都进来了

请求都进来之后,通过location进行过滤,如果你是一个斜杠/,匹配上了的话,当然这块你可以自己去写正则表达式,访问jpg,

js结尾的,图片直接仍得到nginx服务器上,静态的,包括js,css,访问直接走这里就行了,$符号表示什么结尾,开头是^这个,

\.,因为.得转义一下,你这个.jsp结尾的请求,你都得给我转到这下面,看见了吗,这个服务器一定是http的位置,然后这个

proxy_pass这个配置项,代理的key,proxy_pass是固定的,value是你自己随便来的,我这里是114,那我这里就直接这么去写吧,

只要你是.jsp结尾的请求,都给我转向到114的8080,可能他也是一个服务,一回我再解压一个tomcat,你就会发现了,配置就

这么简单

当前我这里又tomcat吗,可能就是咱们之前讲solr的时候,我再解压一个吧,cd到software下,然后tar -zxvf tomcat,

然后-C /usr/local下面,我刚才去解压了一个tomcat,这就多了一个tomcat了,cd到tomcat的webapps下,这里面你会发现这么

几个东西,其实这些我都可以干掉,ROOT其实即使我干掉重启也会生成,所以我干脆就不动他了,我就rm -rf docs/,

rm -rf examples/,rm -rf host-manager/,rm -rf manager/,就剩一个ROOT,我cd到ROOT下,ROOT正常TOMCAT启动好以后,

访问的就是ROOT下的index.jsp文件

我现在去把我的tomcat去启动一下,/usr/local/apache-tomcat/bin/startup.sh

这样的话我就去访问我的地址了,我的地址就是114,http://192.168.1.114:8080,如果tomcat是正常启动,

就会进到小猫的界面,进来了

其实tomcat进来能找到小猫的界面,是因为啥啊,其实你每次删了ROOT,他也会存在的,他访问的都是index.jsp,不信咱们可以看一下

你可以看到jsp下面,他就是你访问的HOME,Documentation,然后Configuration,Example,你可以对照一下

这里边有很多,Home,Documentation,Configuration,Example什么什么,其实你看到的这个界面,默认就进到这里了,

其实就是这个意思,这样的话TOMCAT就启动了,访问JSP我是不需要重新启动服务的,我记得我这里有一个小的JSP文件,

给他copy过来,直接给他拽到这下面,给他拽到ROOT下面,我直接扔到这下面,就多了一个test.jsp

然后我去vim test.jsp,这是我自己随便写的一个JSP文件,主要是TEST1 PAGE,啥也没写,这个你不用去管,可能是空的,

因为我注释掉了,主要是看nginx server ip,然后叫做request.getRemoteAddr(),把当前客户端请求的ip给我得到,然后去打印一下,

差不多就是这样的一个小界面

这个界面有了以后,咱们当前的tomcat是启动的,如果我先做直接去敲test.jsp的话

他就直接进来了,直接访问了当前的JSP,这块我注释掉所以没有,这里是我直接访问tomcat的ip,根nginx没有关系呢,

我本地的IP是192.168.1.200,这块能看懂吧,无非就是加一个界面,然后我本地区访问一下test,看见本地访问的ip地址,

现在有一个问题产生了,如果要是nginx给我做一个代理会是什么情况呢,我浏览器本机的是200,我去访问nginx,nginx当前的服务器

在114上,然后他接收了我的request以后呢,给我代理了一下,然后给我转到了一个后台的tomcat服务器上,这个时候你再去调用

remote address的时候,说白了其实你后端的tomcat这个请求啊,他接收的remote其实是nginx server,因为你转了一把手,请求真正

过来的是114,并不是200,如果我把tomcat放到另外一个节点下,放到115下,相当于115这个节点启动tomcat,get remote address

的时候get的是114,而不是真实的这个200,因为我是经过nginx代理的,是nginx转给你的,会有这样的一个问题,咱们可以把这个

重建一下,我现在tomcat已经启动了,刚才我是没有依赖任何的nginx,现在我去依赖一下他,

vim /usr/local/nginx/conf/nginx.conf,

你看到我的请求是这样的,你如果是后缀是以.jsp结尾的,你这个会经过代理,会转到114下的8080,你可以理解为115下的8080,

其实都是一样的,因为我现在开启了两个服务,一个是nginx服务,一个是tomcat服务,相当于请求过来先请求nginx,nginx帮我转到

tomcat服务,tomcat get remote address,其实是114,并不是我浏览器真正的访问段,其实已经写完了

那我先去把它reload一下,/usr/local/nginx/sbin/nginx -s reload

reload成功了,那咱们来看一下吧,现在我不这么去敲了,这么去敲我是直接去访问tomcat,我不直接访问tomcat,我去直接访问我的

70,我的70下的什么啊,test.jsp,为什么我这样来,看见了吗

他访问的还是能走到tomcat,能理解吗,但是IP变了,remote ip是nginx的ip,是不是会有这样的一个问题,就是相当于

我的请求会经过200这个主机,我去请求到nginx,nginx一看你是.jsp结尾的,直接给你转到tomcat,tomcat最终呈现了这个

界面,但是发现remote的ip变成了nginx,能理解我说的意思吧,你需要自己去定义一个了,你可以用x-forward,或者是用其他

的方式都行,一般是可以随便去取一个名字,自己加一个变量,还是比较推荐这么去干的,那在这儿其实都已经写好了,

你加一句话就OK,然后在这里做一个什么事啊,一定是在这个里面去做这个事情,我copy,加上这一段话,这样的话就是你去

代理之前啊,你先给我去set一个变量,其实这个你可以详细去找一下文档,就不想去解释了,也就是说他这里有一个配置,

这个配置其实你可以去官网去看,我这里就不去说太多了,文档我肯定不会讲的特别详细,特别详细就没得边了,这么多组件,

现在我们不是讲到proxy吗,你自己可以去看,module,他还有一些压缩的,你要知道去用,他给你呈现的都挺好,就是到底怎么去

使用,怎么去配,当然我也会给你去配

所以我在这就不介绍这些参数到底怎么去使用了,服务器上很详细,那你就知道他可以去设置一些参数了,参数固定了

proxy_set_header,就是在header里面设置一个真实的内容,然后这个x-real-ip你自己定,叫啥都行,x-real-ip,

真实的ip又是什么啊,是叫做$remote_addr,大家想一想,现在你本地就是windows通过浏览器,访问到nginx过来,

那对于nginx来讲,谁是remote,我的浏览器,windows,那remote_addr就是192.168.1.200,由于在后端已经转成tomcat了

所以我会把真实的x-real-ip放到我这个header里,然后在后端的tomcat里边,我通过getHeader,然后你的x-real-ip,

去取得真实的客户端IP,可以这么去干,或者你用他内置的有一个变量,叫做x-forward,这个都行

看你怎么去使用,加上一句话,叫做x-real-ip

现在我们去修改一下tomcat,应该cd到这下面,cd /usr/local/apache-tomcat/webapps/ROOT,vim test.jsp

我把这个给他放开,这回就有他了,这个就是一个普通的jsp表达式,request.getHeader('x-real-ip'),nginx请求的时候

携带过来一些东西,或者你也可以放到attribute里,你可以通过setAttrite()和getAttrite(),这方式有很多种,

你可以去随便选择一种,解决办法有很多很多,这里只是给你提一个思路,我这么去做完了以后,保存

我这么去做完了以后,我去保存,刚才我不知道我reload没有,我再去重新reload一下,就把nginx重新reload一下

/usr/local/nginx/sbin/nginx -s reload

然后我再去访问的时候,你会发现了,我已经把真实的client端的192.168.1.200带过来了

这回你就能够找到了,就是可以加一个参数,方式很多种,那这个就是关于反向代理,你会发现了,就是动静分离了,

动态的东西是以jsp结尾的,或者这里面你可以加小括号,这个怎么写来的,正则括号(*.jsp$),一个竖线/,比如*.do

然后.action,只要匹配其中一个,只要你发现请求是和tomcat有关,直接扔给tomcat就可以了,这种是非常简单的

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值