nginx的正反向代理

avatar 2020年3月10日18:14:18 评论 996 次浏览

简介

首先,为了服务的安全,不需要用户直接可以访问服务器,因为我的这个服务原本就不是针对多人服务的。所以,我需要我指定的部分人可以访问,这样就能够避免别人攻击和没有原则的访问了。这时就需要使用到代理服务器,代理分为正向代理和反向代理。如何理解正向代理和反向代理呢?

正反代理的概念

没理解正向代理之前,我们想理解一下什么是代理。举个例子:比如我们去商店买花,而商店的花呢?是从花棚里运过来的,我们不知道花是从哪进的,只知道在这个花店能够买很多各种各样的花。花店的角色就是代理,我们可以通过花店能够购买各种各样的花,花店是为客户服务的,我们并不需要花是从哪进的。反之,花棚的花农不知道这些花是谁买走的,只知道这个花店进了各种各样的花,这时花店针对客户就是正向代理,花店针对花农就是反向代理。正向代理的对象是客户端,反向代理的对象是服务。

环境

www.wulaoer.org    10.211.55.143
wulaoer.org        10.211.55.145

正向代理演示

首先,我们安装了两个nginx服务器,这里我假如我的www.wulaoer.org这台服务器是代理(角色花店),我的wulaoer.org服务是服务段(角色花农)。我现在直接访问我的代理服务器wulaoer.org是没有问题的,我们设置正向代理服务器,应该是本地通过www.wulaoer.org代理,能够获取到wulaoer.org的数据,现在直接访问肯定是能够访问的,看下面的图片。

我先在wulaoer.org上做一下限制,只允许www.wulaoer.org访问wulaoer.org。现在wulaoer.org的nginx配置文件中修改,客户端IP不是10.211.55.143的IP,返回403.

location / {
		if ( $remote_addr !~* "^10\.211\.55\.143") {
			return 403;
		}
		root   /opt/app/demo/html;
		index  index.html index.htm;
	}

重启nginx之后,我在本地使用浏览器直接访问wulaoer.org服务就会出现403的错误。

这时,我们可以尝试使用浏览器加代理的方式访问,你会发现不管是访问www.wulaoer.org,还是访问wulaoer.org返回的数据都是www.wulaoer.org。这个不是我们想要的,我们需要访问wulaoer.org的时候能够获取的是wulaoer.org,而不是www.wulaoer.org。

下面我在www.wulaoer.org服务上做一下域名解析,这个解析不一定就是服务端的IP,也可以是8.8.8.8.

resolver 10.211.55.145;
location / {
	proxy_pass http://$http_host$request_uri;
}

添加之后,重启一下nginx继续尝试,在浏览器设置代理地址为www.wulaoer.org的IP,端口nginx默认的80.访问成功。

下面是添加代理的方法

如果想给客户端设置一下认证,可以尝试使用htpasswd给nginx添加用户信息,这样使用代理需要用户认证了。

反向代理演示

我们上面理解了,花店针对花农就是反向代理,用户不需要知道花是从哪进的,只需要这个店有这中花就行了。客户的喜好不一样,购买花的种类也不一样,所以可能购买的几种花是好几个花农提供的。在这个测试里,我们可以理解为,nginx可以根据用户的不同请求,从不同的服务器上返回不同的数据给客户端

还接着上面的例子,客户端通过代理www.wulaoer.org请求到服务端wulaoer.org服务器上了,但是www.wulaoer.org后面不止一个wulaoer.org服务,可能还有wulaoer.org1,wulaoer.org2,wulaoer.org3等等,可能使用的端口不一样,我们需要根据用户的不同请求跳转到不同的服务端上。

我现在服务端开了两个不同的nginx端口,81,82.然后让代理端指定过去。

	upstream wulaoer {
		server 10.211.55.145:81;
		server 10.211.55.145:82;
	}
	................................
	location / {

		proxy_pass http://wulaoer;
	}

重启代理段nginx,你会发现你请求的数据一会跳到81端口,一会跳到82端口,这就是针对nginx的反向代理。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: