type
status
date
slug
summary
tags
category
icon
password
个人感觉这两个概念技术是很相似的,都是接收客户端的请求,并将这些请求转发给另一台服务器,然后将服务器的响应返回给客户端。
但是他们的使用场景和目标又有很大不同的。
正向代理
正确叫法是:Forward Proxy,译为:正向代理、前置代理、前向代理、客户端代理
主要是面向客户端的。最大的特点就是,在代理的过程中隐藏了真实的请求客户端,服务端不知道真实的客户端是谁。
比如我们耳熟能详的VPN做的事情,就是这个。
也就是说,必须在客户端上面做一些操作,让你的流量全部通过代理服务器去访问网络,外部识别到的都是你的代理服务器的身份,无法追踪到你的实际ip。
如上图所示,
所有客户端(Client A、B)
全部都会被伪装 C
来访问访问外部网络。很多公司为了内部网络安全,都会做网关进行管理。
反向代理
正确叫法是:Reverse Proxy,译为:反向代理、反向代理服务器、逆向代理、服务器代理
主要是面向服务端的,最大的特点就是,从客户端角度来看,并不知道真实访问的服务器是谁,只知道公开的服务器入口。
如上图所示,客户端都是去访问
google.com
但是并不知道最终的服务器实际地址。显而易见的,这样就很轻松的将客户端请求分发到了多台服务器,实现负载均衡,并且还能保护实际服务器,当然还有一些其他的好处。
下面用Nginx来列举一些反向代理的使用场景:
1. 负载均衡:
你可以使用Nginx将进入的请求分发到多台后端服务器。这在配置文件中看起来可能像这样:
在这个配置中,
upstream
指令定义了一个包含多个服务器的服务器组。然后,在 location
块中,proxy_pass
指令将客户端的请求转发到 backend
服务器组中的服务器。这里默认采用的是轮询的负载均衡方法。
Nginx会按照服务器的定义顺序,依次将每个新的请求转发到不同的后端服务器。如果所有的后端服务器对于请求的处理速度都大致相同,这种方法是有效的。
加权轮询(Weighted Round Robin):
这是轮询的扩展。你可以为每个后端服务器指定一个权重(weight),权重较高的服务器将接收更多的请求。
这在后端服务器性能不均匀时很有用。配置看起来可能像这样:
在这个例子中,
backend1.example.com
由于权重设为3,将接收三倍于其他服务器的请求。最少连接(Least Connections):
这种方法会将新的请求转发到当前活跃连接数最少的服务器,适合处理请求处理时间长短不一的情况。
配置看起来可能像这样:
IP Hash:
这种方法根据客户端的IP地址决定将请求发送到哪个服务器,可以用于实现会话持久性(session persistence)。
配置看起来可能像这样:
在这个例子中,
ip_hash
指令让 Nginx 使用 IP Hash 的方法来分配请求。具体来说,Nginx 会根据客户端的 IP 地址计算一个哈希值,然后根据这个哈希值将请求分发给某一个特定的后端服务器。因此,来自同一个客户端 IP 的请求总是会被发送到同一台后端服务器,这样就可以实现会话保持。还有其他一些规则,这里就不一一介绍了。
2. SSL终端:
在Nginx中,你可以配置反向代理来处理所有的SSL/TLS握手过程。配置看起来可能像这样:
在这个配置中,
listen
指令让Nginx在443端口(默认的HTTPS端口)上监听请求,ssl_certificate
和 ssl_certificate_key
指定了SSL证书和私钥的位置。然后,所有的HTTPS请求都会被转发到 backend
服务器组。简单的说,只需要在你的代理服务器上配置好SSL证书,进行https访问,访问实际服务器的时候,采用http(非加密的方式)。
这种将解密后的请求转发到后端服务器,可以大大减轻后端服务器的计算压力。
3. 缓存:
Nginx也可以配置为缓存代理,将后端服务器的响应结果(如网页、图片、视频等)暂存到本地磁盘或内存中,提高对相同请求的处理速度。
当收到相同的请求时,直接从缓存中提供服务,而无需再次访问后端服务器,这可以大大提高服务的响应速度和后端服务器的处理能力。另外,反向代理还可以对响应内容进行优化,如压缩、添加缓存控制头等。
某种意义上来说我们使用的CDN服务器,采用的就是类似的做法。
配置看起来可能像这样:
在这个配置中,
proxy_cache_path
指令定义了缓存的存储路径和其他参数,proxy_cache
指令使得在 /
位置的请求启用缓存。4. 安全
反向代理还可以提供额外的安全层,它可以隐藏后端服务器的信息,防止恶意攻击直接达到后端服务器。
同时,它还可以实施各种安全策略,如阻止来自特定IP地址的请求,限制并发连接数等。
反向代理举例
ChatAPI反代
这样的话就可以用
chatapi.xxxxx.com
去替代 api.openai.com
了,解决了在国内直接访问的问题还有很多其他的应用场景,这里就不一一列举了。
有问题的话,可以在下方评论区留言,一起交流。
- 作者:PolarisAspire
- 链接:https://lpolaris.com//article/netproxy
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章