前言:
这个知识点与微服务的网关层有关,我们的网关层你也可以把它看作一个特殊的反向代理服务器。
正向代理(forward proxy)
定义
- 在聊反向代理之前,我们需要知道什么是正向代理。
正向代理就是一个位于客户端和目标服务器之间的服务器(代理服务器),客户端为了从目标服务器获取内容,从而向代理服务器发送一个请求并指定访问的目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端。
例子
- 我们来举一个我们生活之中很常见的例子就可以知道了,我们有时候需要访问GitHub,但是由于自身IP访问限制,我们无法直接的去访问。这时候就需要一个代理服务器帮我们转发请求到目标的服务器,然后在将目标服务器的响应内容转发给我们客户端了。
- 通过正向代理服务器访问目标服务器,目标服务器并不知道真正的客户端是谁,甚至不知道访问自己的只是一个代理。
作用
- 综上所述,正向代理的作用就是:突破访问限制,通过正向代理,我们可以访问国外的教育网站等等;隐藏客户端真实IP,通过正向代理,目标服务器并不知道客户端真正的IP,它得到的只是代理服务器的IP。
反向代理(reverse proxy)
定义
- 反向代理是服务器与客户端之间的代理服务器,代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
例子
我们可以通过反向代理,来实现对特定的IP的限制或者是过滤。我现在选取Nginx做为的反向代理服务器。
Nginx 实现对特定 IP 的限制和过滤
在使用 Nginx 作为反向代理服务器时,可以通过配置对客户端的 IP 地址 实现 限制 和 过滤。以下是客户端请求流程的详细解释及配置示例。
请求流程
- 客户端发送请求到 Nginx
- 客户端(如浏览器或应用)向 Nginx 发送一个 HTTP 请求,目标是 Nginx 配置的某个地址,例如
http://example.com/api/data
。
- 客户端(如浏览器或应用)向 Nginx 发送一个 HTTP 请求,目标是 Nginx 配置的某个地址,例如
- Nginx 检查客户端的 IP 地址
- Nginx 根据配置中的
allow
和deny
指令,检查客户端的 IP 地址。 - 如果 IP 地址符合
deny
规则,Nginx 会拒绝该请求,返回 403 Forbidden 错误。 - 如果 IP 地址符合
allow
规则,Nginx 会将请求转发给目标服务器。
- Nginx 根据配置中的
- 请求符合允许条件:转发到目标服务器
- 如果客户端的 IP 地址被允许,Nginx 会根据配置将请求转发到目标服务器。
- 目标服务器处理请求并返回响应给 Nginx。
- 请求不符合允许条件:拒绝访问
- 如果客户端的 IP 地址被拒绝,Nginx 会直接拒绝请求,返回 403 Forbidden 错误响应。
- Nginx 返回响应给客户端
- 如果请求被允许并成功转发到目标服务器,Nginx 将目标服务器的响应返回给客户端。
- 如果请求被拒绝,Nginx 将直接返回拒绝的错误消息。
配置示例
假设你希望实现以下要求:
- 允许来自 192.168.1.0/24 网络段的 IP 地址访问。
- 拒绝来自 203.0.113.5 的 IP 地址访问。
- 其他 IP 地址请求正常转发给目标服务器。
配置文件示例如下:
server {
listen 80;
location / {
# 允许来自 192.168.1.0/24 网络段的 IP 地址
allow 192.168.1.0/24;
# 拒绝来自 203.0.113.5 的请求
deny 203.0.113.5;
# 允许其他所有 IP
allow all;
# 后续的反向代理配置,转发请求到目标服务器
proxy_pass http://backend_server;
# 可选:设置客户端真实 IP 的转发
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
作用
综上所述,我们可以知道。反向代理服务器的作用就是隐藏服务器的真实IP,实现负载均衡等。
两者的区别
1.代理对象的不同:正向代理代理的是客户端,隐匿掉的是客户端的IP;反向代理是代理服务端的,隐匿掉的是服务器的IP。
2.配置方的不同:正向代理的配置方是客户端,就好比我们想去翻墙学习,我们就需要主动的下载一个VPN进行配置;反向代理的配置方是服务端的部署,拿一个就容易理解的我们微服务用的网关层,是要在我们服务端开发部署的。
3.感知性的不同:正向代理的话,客户端知道代理的存在,但是反向代理的话,客户端是不知道反向代理的存在的。
4.主要用途的不同:正向代理的主要用途就是保护客户端的IP、突破访问限制;反向代理的主要用途就是实现负载均衡,保护服务端IP免受攻击、缓存加速等。