欢迎您访问Nginx+Tomcat实现反向代理!

Nginx+Tomcat实现反向代理

更新时间:2023-01-17 20:01:23作者:佚名

一、正向代理和反向代理

正向代理类似一个跳板机,代理访问外部资源。例如:我们使用要访问国外网站,但是由于网络限制,我无法正常访问到国外网站,但是我能访问一个代理服务器,而这个代理服务器能访问那个我不能访问的网站。于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。

正向代理 是一个位于客户端和原始服务器( )之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的用途:

(1)访问原来无法访问的资源,如

(2)可以做缓存,加速访问资源

(3)对客户端访问授权,上网进行认证

(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理( Proxy)方式是指以代理服务器来接受上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

通常的代理服务器,只用于代理内部网络对的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。

反向代理的作用:

反向代理服务器通常有两种模型,它可以作为内容服务器的替身,也可以作为内容服务器集群的负载均衡器。

(1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击

大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。 如果您的内容服务器具有必须保持安全的敏感信息,如信用卡号数据库,可在防火墙外部设置一个代理服务器作为内容服务器的替身。代理服务器在安全数据库和可能的恶意攻击之间提供了又一道屏障。与有权访问整个数据库的情况相对比,就算是侥幸攻击成功,作恶者充其量也仅限于访问单个事务中所涉及的信息。未经授权的用户无法访问到真正的内容服务器,因为防火墙通路只允许代理服务器有权进行访问。

(2)负载均衡,通过反向代理服务器来优化网站的负载

以在一个组织内使用多个代理服务器来平衡各 Web 服务器间的网络负载。在此模型中,可以利用代理服务器的高速缓存特性,创建一个用于负载平衡的服务器池。此时,代理服务器可以位于防火墙的任意一侧。如果 Web 服务器每天都会接收大量的请求,则可以使用代理服务器分担 Web 服务器的负载并提高网络访问效率。

对于客户机发往真正服务器的请求,代理服务器起着中间调停者的作用。代理服务器会将所请求的文档存入高速缓存。如果有不止一个代理服务器,DNS 可以采用“循环复用法”选择其 IP 地址,随机地为请求选择路由。客户机每次都使用同一个 URL,但请求所采取的路由每次都可能经过不同的代理服务器。

可以使用多个代理服务器来处理对一个高用量内容服务器的请求,这样做的好处是内容服务器可以处理更高的负载,并且比其独自工作时更有效率。在初始启动期间,代理服务器首次从内容服务器检索文档,此后,对内容服务器的请求数会大大下降。

二、nginx的反向代理实践

nginx支持配置反向代理,通过反向代理实现网站的负载均衡。

两个服务器通过nginx反向代理,本例子通过两台虚拟机实现国外的代理服务器,一台虚拟机提供ngxin服务,另一台虚拟机提供两个服务。

nginx负载均衡器:127.0.0.1

:127.0.0.1:8080

:127.0.0.1:8081

配置好后,启动,我这里是直接替换了下的ROOT文件夹的内容,输入上述的ip+端口即可访问到发布的项目了。(分别删除目录下所有文件,新建一个文件夹ROOT,并在该目录下新建index.html)

访问结果:

访问结果:

nginx通过 配置代理站点,实现负载均衡。

启动、关闭、重启Nginx服务器

注意:一定要在nginx.exe文件所在的文件夹下操作。

(1)启动:

H:nginx-1.12.2>start nginx

或H:nginx-1.12.2>nginx.exe

注:建议使用第一种,第二种会使你的cmd窗口一直处于执行中国外的代理服务器,不能进行其他命令操作。

(2)停止:

H:nginx-1.12.2>nginx.exe -s stop

或H:nginx-1.12.2>nginx.exe -s quit

注:stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。

(3)重新载入Nginx:

H:nginx-1.12.2>nginx.exe -s

当配置信息修改,需要重新载入这些配置时使用此命令。

(4)重新打开日志文件:

H:nginx-1.12.2>nginx.exe -s

测试是否配置成功

经过测试,输入127.0.0.1会访问到下图内容,多次刷新,出现的内容会在下面两图间切换,其实这正是我们上述和容器的结果,测试成功。

可能会遇到的问题(进程关闭失败)

在使用的过程中,你可能会遇到一个很奇葩的问题,就是当关闭命令执行了无数遍,页面却还是可以直接用域名访问。

这个时候就说明你的进程并没有真正关闭,我们可以用命令来查询一下:

cmd中输入: -an | find "0:80"

如果有,说明真的没有关闭这个进程。没有,那就看看是不是浏览器缓存的问题。

针对进程不能正常关闭,可以用如下命令来关闭: /F /IM nginx.exe 或者 /pid 你要关闭的pid /F

参考: