Nginx正向代理详解(附带完整配置实例)
Nginx 代理还可以分为正向代理和反向代理。反向代理是代替服务端处理请求,正向代理正好相反,Nginx 正向代理是代替客户端处理请求。
正向代理的主要作用就是代替客户端发送请求给服务端,获得服务端响应数据后再返回给客户端,如图 1 所示。

图 1 Nginx正向代理
从服务端的角度来看,客户端仿佛就是这台 Nginx 正向代理服务器,但事实上并不是,它仅仅是一个中转站而已。
正向代理的实际应用场景也有很多,常见的是匿名访问,例如为了保护自己的隐私,通过正向代理服务器访问某些网站,这样网站的管理员无法得知访问者的真实位置。
另一个应用是用作跳板机,很多企业的云服务器都在使用专有网络,没有在允许访问名单里的IP地址无法访问服务器,这个时候就需要一台跳板机,通过它来访问专有网络内的服务器。
网络上有很多免费的正向代理服务器,甚至有些代理服务器可以让你访问到国外的一些网站,但是切记,千万不要用它来做违法的事情!
在 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 服务并配置正向代理。
3) 因为使用本地计算机作为客户端,充当用户的角色,所以我们需要为本地计算机(Windows系统)配置代理,指向 Nginx 正向代理服务器,步骤如下图所示。

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

图 5 客户端通过代理访问网站(计算机使用浏览器访问虚拟机二的网站)
通过访问日志可以看到有两条访问记录:
因为客户端访问网站时是通过 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; }示例中:
- resolver 用于配置 DNS 服务器地址。可以配置多个,以轮询方式请求;
- resolver_timeout 用于解析超时时间;
- 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 客户端通过代理访问网站(计算机使用浏览器访问虚拟机二的网站)
通过访问日志可以看到有两条访问记录:
- 第一条访问记录的客户端 IP 地址是计算机本身,这是因为在步骤一搭建好网站后访问了一下确认网站是否搭建成功;
- 第二条访问记录是在计算机配置了代理后访问的,记录的客户端 IP 地址是 Nginx 正向代理服务器的,说明 Nginx 正向代理配置成功。
因为客户端访问网站时是通过 Nginx 代理服务器访问的,代理服务器将访问的结果再转发给客户端,这样网站的访问日志中记录的来访人员只能是代理服务器。对于网站来说,它并不知道客户端的存在。