个人感觉这两个概念技术是很相似的,都是接收客户端的请求,并将这些请求转发给另一台服务器,然后将服务器的响应返回给客户端。
但是他们的使用场景和目标又有很大不同的。
正确叫法是:Forward Proxy,译为:正向代理、前置代理、前向代理、客户端代理
主要是面向客户端的。最大的特点就是,在代理的过程中隐藏了真实的请求客户端,服务端不知道真实的客户端是谁。
比如我们耳熟能详的VPN做的事情,就是这个。
也就是说,必须在客户端上面做一些操作,让你的流量全部通过代理服务器去访问网络,外部识别到的都是你的代理服务器的身份,无法追踪到你的实际ip。
如上图所示, 所有客户端(Client A、B)全部都会被伪装 C 来访问访问外部网络。
很多公司为了内部网络安全,都会做网关进行管理。
正确叫法是:Reverse Proxy,译为:反向代理、反向代理服务器、逆向代理、服务器代理
主要是面向服务端的,最大的特点就是,从客户端角度来看,并不知道真实访问的服务器是谁,只知道公开的服务器入口。
如上图所示,客户端都是去访问 google.com 但是并不知道最终的服务器实际地址。
显而易见的,这样就很轻松的将客户端请求分发到了多台服务器,实现负载均衡,并且还能保护实际服务器,当然还有一些其他的好处。
下面用Nginx来列举一些反向代理的使用场景:
你可以使用Nginx将进入的请求分发到多台后端服务器。这在配置文件中看起来可能像这样:
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
在这个配置中,upstream 指令定义了一个包含多个服务器的服务器组。然后,在 location 块中,proxy_pass 指令将客户端的请求转发到 backend 服务器组中的服务器。
这里默认采用的是轮询的负载均衡方法。
Nginx会按照服务器的定义顺序,依次将每个新的请求转发到不同的后端服务器。如果所有的后端服务器对于请求的处理速度都大致相同,这种方法是有效的。
加权轮询(Weighted Round Robin):
这是轮询的扩展。你可以为每个后端服务器指定一个权重(weight),权重较高的服务器将接收更多的请求。
这在后端服务器性能不均匀时很有用。配置看起来可能像这样:
http {
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com;
server backend3.example.com;
}
...
}
在这个例子中,backend1.example.com 由于权重设为3,将接收三倍于其他服务器的请求。
最少连接(Least Connections):
这种方法会将新的请求转发到当前活跃连接数最少的服务器,适合处理请求处理时间长短不一的情况。
配置看起来可能像这样:
http {
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
...
}
IP Hash:
这种方法根据客户端的IP地址决定将请求发送到哪个服务器,可以用于实现会话持久性(session persistence)。
配置看起来可能像这样:
http {
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
...
}
在这个例子中,ip_hash 指令让 Nginx 使用 IP Hash 的方法来分配请求。具体来说,Nginx 会根据客户端的 IP 地址计算一个哈希值,然后根据这个哈希值将请求分发给某一个特定的后端服务器。因此,来自同一个客户端 IP 的请求总是会被发送到同一台后端服务器,这样就可以实现会话保持。
还有其他一些规则,这里就不一一介绍了。
在Nginx中,你可以配置反向代理来处理所有的SSL/TLS握手过程。配置看起来可能像这样:
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://backend;
}
}
在这个配置中,listen 指令让Nginx在443端口(默认的HTTPS端口)上监听请求,ssl_certificate 和 ssl_certificate_key 指定了SSL证书和私钥的位置。然后,所有的HTTPS请求都会被转发到 backend 服务器组。
简单的说,只需要在你的代理服务器上配置好SSL证书,进行https访问,访问实际服务器的时候,采用http(非加密的方式)。
这种将解密后的请求转发到后端服务器,可以大大减轻后端服务器的计算压力。
Nginx也可以配置为缓存代理,将后端服务器的响应结果(如网页、图片、视频等)暂存到本地磁盘或内存中,提高对相同请求的处理速度。
当收到相同的请求时,直接从缓存中提供服务,而无需再次访问后端服务器,这可以大大提高服务的响应速度和后端服务器的处理能力。另外,反向代理还可以对响应内容进行优化,如压缩、添加缓存控制头等。
某种意义上来说我们使用的CDN服务器,采用的就是类似的做法。
配置看起来可能像这样:
http {
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m;
server {
listen 80;
location / {
proxy_cache my_cache;
proxy_pass http://backend;
}
}
}
在这个配置中,proxy_cache_path 指令定义了缓存的存储路径和其他参数,proxy_cache 指令使得在 / 位置的请求启用缓存。
反向代理还可以提供额外的安全层,它可以隐藏后端服务器的信息,防止恶意攻击直接达到后端服务器。
同时,它还可以实施各种安全策略,如阻止来自特定IP地址的请求,限制并发连接数等。
server {
listen 443 ssl;
server_name chatapi.xxxxx.com;
ssl_certificate /etc/nginx/cert/chatapi.xxxxx.com.crt;
ssl_certificate_key /etc/nginx/cert/chatapi.xxxxx.com.key;
location / {
proxy_pass https://api.openai.com/;
proxy_ssl_server_name on;
proxy_set_header Host api.openai.com;
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
access_log /www/access_nginx.log combined;
}
这样的话就可以用 chatapi.xxxxx.com 去替代 api.openai.com 了,解决了在国内直接访问的问题
还有很多其他的应用场景,这里就不一一列举了。
作者:PolarisAspire
链接:https://www.lpolaris.com/article/netproxy
当我们需要大量IP进行快节奏完成业绩的时候,很多人都会想到去IP代理服务商那里购买IP代理,所以我相信很多人对于IP代理这个词已经有一定的认识了,那么还有一个词叫做:在线代理ip网页代理
一般适用情况:1、两台都有外网IP,一台服务器请求资源通过另外一个服务器,本文重点讲第一种。2、两台服务器,其中一台服务器只有内网IP,另外一台服务器有公网和内网IP。
公司项目最近出现获取访问域名、端口、IP错误现象,通过排查发现, 之前项目一直通过Nginx自定义Headers信息来获取,但最近运维人员失误操作造成自定义Header信息丢失,造成项目拿不到对应的数据。
反向代理看上去看深奥,其实不然,只是因为汉语言文化的差异导致它看上去深奥。一般反派感觉都比较厉害和神秘。要理解反向代理,我们就不得不说一下正向代理。正向代理代理的对象是客户端;反向代理代理的对象是服务端
写在教程前:为什么要反向代理cloudflare?答:缩短路由,加快cloudflare节点到大陆用户的速度,用过cloudflare的用户应该知道,这家CDN的速度在除了大陆以外的地方访问都非常快,那么又没有什么办法使其对大陆访问良好呢?
调用 new Proxy() 可常见代替其它目标 (target) 对象的代理,它虚拟化了目标,所以二者看起来功能一致。代理可拦截JS引擎内部目标的底层对象操作,这些底层操作被拦截后会触发响应特定操作的陷阱函数。
多人协作模式下,修改代理比较麻烦,而且很容易某个开发人员会修改了vue.config.js文件后提交了。第一,很容易引起冲突。 第二,很容易出现代理错误,需要排查。而且现在微服务盛行
本地开发,代理访问,防止跨域(一般通过webpack配置代理即可),特殊情况如携带一些自定义的登录cookie则需要通过自己写node,作为一种server中间层,单线程异步可以缓解服务器压力
changeOrigin的属性值为一个布尔值,如果设置为true,那么本地会虚拟一个NODE服务端接收你的请求并代你发送该请求(中间件)。[本质上是本地开了一个服务器dev-server,所有的请求都通过这里转发出去。]
我们已经知道了什么是正向代理与反向代理,这次我们就讲一下Nginx的动静分离的案例,其实质运用的就是反向代理,专门用一台服务器代理服务器上的图片资源。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!