INFO
Categories

反转反向代理→正向代理

什么是正向代理?

正向代理代理的是客户端
正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端

1.1.2 正向代理的作用

为在防火墙内的局域网客户端提供访问Internet的途径
可以使用缓冲特性减少网络使用率
使用代理后会隐藏真实的IP地址(安全类应用:跳板机)
访问受地理位置限制的网络(最常用for me)

Nginx 代理还可以分为正向代理和反向代理。反向代理是代替服务端处理请求,正向代理正好相反,Nginx 正向代理是代替客户端处理请求。

正向代理的主要作用就是代替客户端发送请求给服务端,获得服务端响应数据后再返回给客户端,如图所示

从服务端的角度来看,客户端仿佛就是这台 Nginx 正向代理服务器,但事实上并不是,它仅仅是一个中转站而已。

正向代理的实际应用场景也有很多,常见的是匿名访问,例如为了保护自己的隐私,通过正向代理服务器访问某些网站,这样网站的管理员无法得知访问者的真实位置。

另一个应用是用作跳板机,很多企业的云服务器都在使用专有网络,没有在允许访问名单里的IP地址无法访问服务器,这个时候就需要一台跳板机,通过它来访问专有网络内的服务器。

网络上有很多免费的正向代理服务器,甚至有些代理服务器可以让你访问到国外的一些网站,但是切记,千万不要用它来做违法的事情!

在 Nginx 主配置文件中配置正向代理的示例如下:

location / {
    resolver 114.114.114.114 223.5.5.5;
    resolver_timeout 30s;
    proxy_pass $scheme://$host$request_uri;
}

示例中:

  • resolver 用于配置 DNS 服务器地址。可以配置多个,以轮询方式请求;
  • resolver_timeout 用于解析超时时间;
  • proxy_pass$scheme://$host$request_uri 为正向代理核心配置,用于转发客户端请求。

案例演示

通过 Nginx 正向代理服务器访问网站。

在虚拟机二(192.168.1.130)上搭建一个简单的网站,在虚拟机一(192.168.1.128)上搭建 Nginx 正向代理服务器,Nginx 正向代理案例的架构如下图所示。我们在机器本身配置正向代理的地址,访问虚拟机二的网站,查看网站的访问日志记录的是谁的 IP 地址。

1) 在虚拟机二(192.168.1.130)上搭建一个简单的网站。直接用 DNF 部署 Nginx 服务,再在 Nginx 服务上放一个网站,最后启动 Nginx 服务访问网站。

2) 在虚拟机一(192.168.1.128)中部署 Nginx 服务并配置正向代理。

-----省略编译安装 Nginx 服务步骤-----
[root@linux nginx]# vim conf/nginx.conf
user nginx;
pid logs/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;  #端口使用默认的 80 端口
        server_name  localhost;

        location / {
            resolver 114.114.114.114 223.5.5.5;
            resolver_timeout 30s;
            proxy_pass $scheme://$host$request_uri;
        }

        error_page  500 502 503 504 /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

3) 因为使用本地计算机作为客户端,充当用户的角色,所以我们需要为本地计算机(Windows系统)配置代理,指向 Nginx 正向代理服务器,步骤如下图所示。

4) 计算机本身的代理配置完成后,使用浏览器访问虚拟机二(192.168.1.130)的网站,如下图所示。再去虚拟机二上查看 Nginx 访问日志,查看访问网站的 IP 地址。

[root@localhost nginx]# tail -f /usr/local/nginx/logs/access.log
192.168.1.1 - - [19/Dec/2021:17:01:53 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" "-"
192.168.1.128 - - [19/Dec/2021:17:21:22 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" "-"

通过访问日志可以看到有两条访问记录:

  • 第一条访问记录的客户端 IP 地址是计算机本身,这是因为在步骤一搭建好网站后访问了一下确认网站是否搭建成功;
  • 第二条访问记录是在计算机配置了代理后访问的,记录的客户端 IP 地址是 Nginx 正向代理服务器的,说明 Nginx 正向代理配置成功。

因为客户端访问网站时是通过 Nginx 代理服务器访问的,代理服务器将访问的结果再转发给客户端,这样网站的访问日志中记录的来访人员只能是代理服务器。对于网站来说,它并不知道客户端的存在。