Nginx 的正向代理与反向代理
Nginx 是一种反向代理服务器,可以用作反向代理来实现负载均衡。本节将详细讨论 Nginx 的反向代理功能。在此之前,我们先来了解一下代理服务器的概念,以及正向代理的定义。
(1)代理服务器
代理服务器是一台位于客户端计算机与目标服务器之间的计算机,为客户端提供间接的网络服务。它既可以驻留在用户的本地计算机上,也可以位于用户计算机和目标服务器之间的不同位置。简而言之,代理服务器使得客户端的请求并不直接发送到目标主机,而是先经过一个中间服务器。中间服务器接收客户端的请求后,再将请求转发给目标主机,并将目标主机返回的数据(存储在代理服务器的硬盘中)传送回客户端。这个中间服务器就是所谓的代理服务器,类似于“中间人”的角色。如果代理服务器出现故障,客户端的数据将无法传递到目标服务器。
代理服务器的优点包括:
①提升访问速度。
②过滤网络信息,起到防火墙的作用。
③通过代理服务器访问那些原本无法访问的目标站点。
(2)正向代理
正向代理是一种位于客户端与原始服务器之间的服务器。为了获取原始服务器上的内容,客户端首先向代理服务器发送请求,并指定目标服务器,然后代理服务器将请求转发给原始服务器,并将获得的内容返回给客户端。
正向代理的显著特点是,客户端知道要访问的服务器地址,而服务器只知道请求来自哪个代理服务器,而不知道请求来自哪个具体的客户端。正向代理模式可以屏蔽或隐藏客户端的真实信息,如图所示:
正向代理主要代理客户端,帮助客户端发送请求,客户端需要进行一定的设置才能使用正向代理。
正向代理的示例如下:
```nginx
server {
listen 80;
server_name localhost;
# 指定 DNS 服务器 IP 地址
resolver x.x.x.x;
location / {
# 设定代理服务器的协议和地址
proxy_pass http://$host$request_uri;
}
}
```
正向代理的功能包括:
①访问原本无法访问的站点。
②缓存数据,加速访问速度。
③对客户端访问进行授权,网上访问需要认证。
④记录用户的访问行为(如上网行为管理),并对外隐藏用户信息。
(3)反向代理
反向代理是指代理服务器首先接收客户端的连接请求,然后将请求转发给内部网络中的服务器,并将服务器返回的结果传递给客户端。在这种情况下,代理服务器对外表现为一个反向代理服务器,如图所示:
从图可以看出,多个客户端向服务器发送请求时,Nginx 服务器接收请求并根据一定规则将其分配给后端的业务处理服务器进行处理。此时,客户端的身份是明确的,但具体由哪台服务器处理请求并不明确,这正是 Nginx 充当反向代理的作用。
反向代理主要代理服务器端,帮助服务器接收请求,通常用于服务器集群的分布式部署,反向代理可以隐藏服务器的信息。
反向代理的示例如下:
```nginx
# 配置后端服务器
upstream proxy_servers {
server http://192.168.1.1:8000/uri/;
server http://192.168.1.2:8000/uri/;
server http://192.168.1.3:8000/uri/;
}
server {
...
listen 80;
server_name #代理服务器IP或网址;
location / {
# 使用服务器组名称
proxy_pass proxy_servers;
}
}
```
反向代理的功能包括:
①保障内网安全:通常将反向代理作为公网访问的地址,而 Web 服务器则位于内网中。
②负载均衡:通过反向代理服务器优化网站的负载分配。
③节约 IP 地址资源:企业内的所有网站共享一个注册的 IP 地址,这些服务器分配了私有地址,并通过虚拟主机方式对外提供服务。