首页 > 编程笔记 > Linux命令 阅读:6

Nginx正向代理详解(附带完整配置实例)

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

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


图 1 Nginx正向代理

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

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

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

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

在 Nginx 主配置文件中配置正向代理的示例如下:
location / {
    resolver 114.114.114.114 223.5.5.5;
    resolver_timeout 30s;
    proxy_pass $scheme://$host$request_uri;
}
示例中:

案例演示

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

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


图 2 Nginx正向代理案例的架构

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


图 3 访问网站

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;
        }
    }
}

[root@linux nginx]# ./sbin/nginx -t  #养成好习惯,每次配置完先检查一下
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@linux nginx]# ./sbin/nginx -c conf/nginx.conf

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


图 4 在Windows系统上配置代理

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" "-"

图 5 客户端通过代理访问网站(计算机使用浏览器访问虚拟机二的网站)

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

相关文章