系列文章目录
【Nginx一】——Nginx介绍(正向代理 反向代理 负载均衡 动静分离)
【Nginx二】——Nginx常用命令 配置文件
Nginx如何处理请求
【Nginx三】——反向代理
前言
本篇博客主要介绍Nginx如何实现反向代理,会进行介绍什么是反向代理,以及进行实例实现反向代理。
一、反向代理是什么?
代理服务器来接收网络上请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上连接的客户端。
背景:首先有一个用户C,三台服务器S1、S2和S3,但S1对外网开放,S2和S3不对外网开放,还有一份资源D,资源D放在服务器S2和S3上。
用户C并不知道资源D在服务器S2和S3上面,他只知道访问服务器S1就可以得到资源D,于是他每次都是直接访问服务器S1,只不过提供给用户C资源的都是来自服务器S2或者S3.
反向代理对于用户C来说,他是不知道资源D具体在哪里,也不知道具体由谁提供。
对于服务器S1来说每次都接受用户的请求,然后再把请求根据调度策略交给提供资源D的服务器S2或者S3,对于服务器S2和S3来说同样也都不知道访问这份资源D的真实用户是谁,只是和服务器S1进行交互。
二、Nginx实现反向代理
实现反向代理示意图:
1.tomcat环境准备并进行访问
在Linux服务器上安装tomcat并进行启动,linux虚拟机的ip为192.168.60.123
通过ip+端口号8080访问tomcat服务器;成功访问的页面:
2.通过域名访问tomcat
在windows下的hosts文件中进行域名与ip的映射关系。C:\WINDOWS\system32\drivers\etc
Windows10上的host文件配置作用是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”。这个文件的主要作用是定义IP地址和主机名的映射关系,是一个映射IP地址和主机名的规定³。当我们在浏览器中输入一个网址时,浏览器会首先查找本地的hosts文件,如果找到了对应的IP地址,就直接访问该IP地址对应的服务器,否则就向DNS服务器发出请求,获取该网址对应的IP地址。
示例(如图:)
linux虚拟机的ip为192.168.60.123
这次通过域名www.test.com+端口号8080进行访问。
实现效果截图:
3.通过域名不加端口号进行访问(实现反向代理)
修改Nginx的配置文件,编辑nginx.conf文件,修改server模块。
首先nginx会监听80端口的请求,再匹配服务名是为192.168.60.123的请求,匹配上之后再根据location的匹配规则进行匹配。要将请求传递到 HTTP 代理服务器,使用 proxy_pass 指令可以看这篇博客进行详细了解Nginx如何处理请求
代码如下(示例):
server { listen 80; server_name 192.168.60.123; location / { proxy_pass http://192.168.60.123:8080; } }
配置好之后通过域名www.test.com进行访问
实现效果截图:
总结
不难看出反向代理对于客户端来说不知道目的服务器,客户端只知道请求代理服务器能够获取到需要的资源。而代理服务器可以通过相应的配置拦截前往我们后端服务器的客户端的请求,通过这样做,代理服务器可以保护目的服务器的身份并作为对安全攻击的额外防御。