随笔录--正向代理和反向代理\Nginx

正向代理反向代理都是代理服务器的两种应用场景,它们在网络请求的处理过程中扮演不同的角色:

正向代理(Forward Proxy):正向代理位于客户端和目标服务器之间,客户端通过正向代理来访问目标服务器。正向代理代表客户端发起请求,隐藏客户端的真实身份。常见的应用场景包括使用魔法、访问内网资源、缓存和过滤等。

反向代理(Reverse Proxy):反向代理位于客户端和目标服务器之间,客户端直接访问反向代理服务器,反向代理将请求转发给目标服务器。反向代理代表目标服务器接收请求,隐藏目标服务器的真实身份。常见的应用场景包括负载均衡、安全防护、缓存和SSL终端等。

使用 Nginx 作为反向代理的方法如下:

安装Nginx:根据操作系统和需求选择合适的Nginx版本进行安装。安装完成后,启动Nginx。

配置反向代理:编辑 Nginx 的配置文件(通常位于/etc/nginx/nginx.conf或/etc/nginx/sites-available/default),在 http 或 server 块中添加反向代理配置。

示例配置:

http {
    ...
    server {
        listen 80; # 监听的端口号
        server_name example.com; # 反向代理的域名

        location / {
            proxy_pass http://backend_server; # 将请求转发给目标服务器
            proxy_set_header Host $host; # 设置请求头部信息
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    
}

在这个示例中,将客户端的请求转发给名为 backend_server 的目标服务器。同时设置了一些请求头部信息,以便目标服务器获取客户端的真实 IP 地址。

重启 Nginx:保存配置文件并重启 Nginx,使配置生效。通常可以使用 nginx -s reload 或 systemctl restart nginx 命令重启 Nginx。

完成以上步骤后,Nginx 就被配置为反向代理服务器,可以将客户端的请求转发给目标服务器。

 

什么是正向代理和反向代理
  1. 正向代理

  2. 反向代理

  3. 两者的区别

1.正向代理

正向代理隐藏真实客户端

正向代理,就是一个位于客户端和原始服务器之前的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并且指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端才能使用正向代理。

图片

比如我们要去访问某个网站,我们直接访问不通,那么我们就可以找一个代理服务器为我们服务,我们通过代理服务器请求到这个网站。对于这个网站而言他只知道有一个服务器访问了自己,并不知道你访问了他。

图片

再举一个简单的例子告诉你什么是正向代理:

假设 A 和 B 是同学,但平时并不是很熟,A 向 B 借钱,被 B 拒绝了。

此时 A 联系了 C,C 是 A 的好朋友,C 和 B 也很熟。

C 向 B 借了钱并且给了 A。

此时 A 拿到了 B 的钱,但B并不知道他的钱借给了 A。

这时B同学扮演了一个非常关键的角色,就是代理,也可以说是正向代理

即就是隐藏了真实的客户端

图片

正向代理的过程,隐藏了真实的客户端。客户端请求的服务都被代理服务器代替来请求

2.反向代理

反向代理隐藏真实服务端

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为 Web 加速,即使用反向代理作为 Web 服务器的前置机来降低网络和服务器的负载,提高访问效率。

反向代理方式是指以代理服务器来接收 internet 网上的连接请求,然后将请求转发给内部网络上的服务器,并从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个节点服务器。

图片

简单举例什么是反向代理:

我们平时访问百度时,直接访问网址。

它背后可能有成千上万的服务器为我们服务,但具体是哪一台为我们服务,我们并不知道,也没必要知道。

我们只需要知道反向代理服务器是谁就可以(只要达到目的就可以了)。

网址就是我们的反向代理服务器,它会把我们的请求发送到真实的服务器那里去。

即隐藏真实的服务端

Nginx 就是性能非常好的反向代理服务器,用来做负载均衡。

图片

3. 两者的区别

两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端

图片

正向代理中,proxy 和 client 同属一个 LAN,对 server 透明;反向代理中,proxy 和 server 同属一个 LAN,对 client 透明。实际上 proxy 在两种代理中做的事都是代为收发请求和响应,不过从结构上来看正好左右互换了下,所以把后出现的那种代理方式叫成了反向代理。

正向代理是指代理服务器代表客户端向目标服务器发送请求,代理服务器与目标服务器通信,并将响应返回给客户端。在这种情况下,目标服务器不知道请求的来源是代理服务器还是真正的客户端,因此正向代理可以用于隐藏客户端的真实 IP 地址和身份信息。客户端必须要进行一些特别的设置才能使用正向代理。就像要访问 google 用 vpn 代理翻墙去访问(用户知道要访问真正的服务器)

图片

反向代理是指==代理服务器代表原始服务器==向客户端发送响应,代理服务器接收客户端请求并将其转发到原始服务器,然后将原始服务器的响应返回给客户端。在这种情况下,客户端不知道响应的来源是原始服务器还是代理服务器,因此反向代理可以用于负载均衡、缓存静态资源、增加安全性等方面。

图片

Nginx 是一个功能强大的开源 Web 服务器,也是一个反向代理服务器。使用 Nginx 做反向代理可以将客户端请求转发到后端多台真实服务器上,从而实现负载均衡、缓存静态资源、防止攻击等功能。下面是使用 Nginx 做反向代理的示例代码:

http {
    upstream backend { # upstream 模块指定了后端服务器的列表,可以设置不同的权重,以实现负载均衡;
        # 设置后端服务器列表
        server backend1.com weight=5;
        server backend2.com;
        server unix:/tmp/backend3;
    }

    server {
        listen 80 ; # 监听端口
        server_name shier.com;

        location / { # location 模块指定了反向代理的规则,以及缓存静态资源和防止攻击等功能
            # 设置反向代理规则
            proxy_pass http://backend/; # 将请求转发给原始服务器
            proxy_set_header Host $host; #设置请求头部信息
            proxy_set_header X-Real-IP $remote_addr;

            # 缓存静态资源
            proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
            proxy_cache_key "$scheme$request_method$host$request_uri";
            proxy_cache_valid any 20m;
            proxy_cache_bypass $http_pragma;
            proxy_cache_revalidate on;

            # 防止攻击
            limit_conn_zone $binary_remote_addr zone=addr:10m;
            limit_conn addr 5;
            limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
            limit_req zone=one burst=50 nodelay;
        }
    }
}
正向代理:

正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端。正向代理的情况下,客户端必须要进行一些特殊的设置才能使用。

  • 正向代理需要主动设置代理服务器 ip 或者域名进行访问,由设置的服务器 ip 或者域名去访问内容并返回

  • 正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见。

图片

使用场景:比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了

反向代理:

反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。对于客户端来说,反向代理就相当于目标服务器,只需要将反向代理当作目标服务器一样发送请求就可以了,并且客户端不需要进行任何设置。

  • 正向代理需要配置代理服务器,而反向代理不需要做任何设置。

  • 反向代理是代理服务器,为服务器收发请求,使真实服务器对客户端不可见。

图片

使用 Nginx 实现反向代理:

示例:使用 Nginx 反向代理,根据访问的路径跳转到不同端口的服务中,Nginx 监听端口为 9001 访问 http://192.168.17.129/edu/直接跳转到 127.0.0.1:8080 访问 http://192.168.17.129/vod/直接跳转到 127.0.0.1:8081 第一步,需要准备两个 tomcat,一个 8080 端口,一个 8081 端口,并准备好测试的页面 第二步,修改 nginx 的配置文件,在 http 块中配置 server

server {
 listen       9001;
 server_name  192.168.17.129;

 location ~ /edu/ {
  proxy_pass  http://127.0.0.1:8080
 }

 location ~ /vod/ {
  proxy_pass  http://127.0.0.1:8081
 }
}

正向代理:客户端向代理服务器发送一个请求并指定目标,由代理服务器向目标服务器发起请求,并将响应结果返回给客户端。代理的对象是客户端

图片

使用场景:

  • 突破访问限制:正向代理可以访问受限制的资源,例如被墙的网站和内网资源等

  • 提高访问速度:正向代理能够缓存数据,当客户端请求相同资源时,能直接从缓冲区获取并返回,提高访问速度

  • 隐藏客户端信息:正向代理能够隐藏客户端的真实 IP 和其他信息,保护客户端的隐私

  • 网络爬虫:通过设置代理服务器,爬取目标网站的数据

反向代理:客户端发起请求到代理服务器,代理服务器将请求转发到内部服务器,获取到服务器的响应并返回给客户端。代理的对象是服务器

图片

使用场景:

  • 负载均衡:反向代理可以将客户端的请求分发到多台服务器上,实现负载均衡

  • 缓存加速:反向代理通过缓存服务器上的静态资源,例如页面、图片和文件等,加速网站的访问速度

  • 安全防护:反向代理可以在客户端和服务器之间进行安全过滤,如过滤恶意攻击、限制外部访问等,保护服务器的安全

使用 Nginx 做反向代理:

  1. 安装 Nginx 服务器

  2. 修改 nginx.conf 配置文件

http {
    server {
        listen 80;
        server_name  localhost; 
        location / {
            proxy_pass http://backend;  
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    # 实现负载均衡
    upstream backend {
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
    }
}
  • listen :指定监听端口

  • server_name:指定监听地址

  • location:指定请求的路径

  • proxy_pass :指定目标服务器

  • proxy_set_header :指定传递给目标服务器的请求头信息,比如 Host,X-Real-IP,X-Forwarded-For 等,用来获取客户端的真实 IP

  1. 重启 Nginx 服务

在上面的例子中,当客户端访问 http://localhost/(没加端口时默认是 80 端口),会采用轮询的机制将请求转发到 127.0.0.1:8081 和 127.0.0.1:8082 上,然后将结果返回给客户端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值