【Nginx】使用Nginx实现正向代理与反向代理
文章目录
Nginx由于其体积小、性能强而被广泛使用,而其中用其做反向代理服务器是非常常见的。但其实Nginx也是可以用来做正向代理服务器的,本文就记录我用Nginx做正向代理服务器和反向代理服务器的过程。
关于正向代理和反向代理的示意图如下:
一、用Nginx做正向代理服务器
如下所示,假设我们现在本地电脑所连接的是某公司的内网,而该公司设置了只有通过公司的代理服务器才能访问公网。那我们现在的本地电脑仅连接了网络的话,也不能访问公网,必须要设置代理为公司代理服务器的地址,之后才可以通过代理服务器访问公网。
下面,我们就配置一台Nginx来作为图中的正向代理服务器。
首先,我们打开本地电脑也即192.168.0.207
的终端,然后执行如下命令:
|
|
然后,我们设置代理:
|
|
然后再次访问一下http://example.com/
:
|
|
上面是准备工作,下面我们正式开始配置正向代理服务器(即192.168.0.199
)。此处我们仅做演示,所以最简化配置,在nginx.conf
文件中的http
模块下添加部分内容:
|
|
按上述配置好之后,启动Nginx,此时再次使用本地电脑来访问http://example.com/
:
|
|
除此之外,我们还可以通过查看Nginx的access.log
,来确认刚刚的这次访问的确是走了代理服务器的,此时的access.log
中应该有一行:
|
|
二、用Nginx做反向代理服务器
如下所示,我们先配置域名nginx.hongmao.run
解析到192.168.0.199
,然后192.168.0.199
再转发到192.168.0.200
,在真实的生产环境中,目标服务器(也即192.168.0.200
)可能不是Nginx了,而是Tomcat之类的。而Tomcat之类的这种Web服务器提供的服务一般不会直接向公网开放,而是通过Nginx服务器来反向代理一下,我们下面就模拟这个过程,但是我们此处不用Tomcat了,目标服务器也用Nginx来实现。
首先,将199和200这两台机器上的Nginx的index.html
修改以下,分别添加一行<p>current ip: 192.168.0.199</p>
和<p>current ip: 192.168.0.200</p>
,用于区分当前访问到了哪台机器。
然后,启动192.168.0.199
上的Nginx服务器,无需改动配置,通过IP能正常访问即可。然后,增加域名hongmao.run
的解析记录,使nginx.hongmao.run
解析到192.168.0.199
,然后,访问nginx.hongmao.run
,可以正常访问,因为此处几台机器都是在同一个局域网内。
然后,启动192.168.0.200
上的Nginx服务器,通过IP可以正常访问即可,然后设置该服务仅允许192.168.0.199
访问。设置过程如下:
先修改192.168.0.200
的配置文件:
|
|
如此配置之后,非192.168.0.199
的机器访问时,均会得到403的响应,我们上面在配置中配置了当403时跳转到html/
目录下的403.html
页面,所以,此处我们还需要写一个403的页面,放在html/
目录下:
|
|
刷新了配置文件后,我们在本地电脑(192.168.0.207
)上访问192.168.0.200
,此时应该得到的是我们配置的那个403页面。
接下来,我们就需要配置反向代理服务器(192.168.0.199
)了:
|
|
刷新了配置文件后,此时我们访问http://nginx.hongmao.run/
看到的最下面一行应该是“current ip: 192.168.0.200”,至此我们就用Nginx实现了反向代理。
文章作者 hongmao
上次更新 2022-04-04