正向代理
正向代理是客户端的代理,为客户端收发请求,使真实客户端对服务器不可见。客户端需要明确地配置代理服务器的地址和端口,然后通过代理服务器来访问目标服务器。正向代理常用于访问外网受限的环境,或者隐藏客户端的真实 IP 地址。
反向代理
反向代理是服务器端的代理,为服务器接收客户端的请求,将请求转发给内部的服务器,并将内部服务器的响应返回给客户端。客户端只知道反向代理服务器的地址,而不知道内部服务器的真实地址。反向代理常用于隐藏服务器的真实 IP 地址,提高服务器的安全性,以及实现负载均衡等功能。
负载均衡
负载均衡是将客户端的请求均匀地分配到多个服务器上,以提高系统的处理能力和可用性。当有大量客户端请求时,负载均衡器可以根据一定的算法(如轮询、IP 哈希等)将请求分发到不同的服务器上,避免单个服务器过载。
正向代理配置
假设我们要配置一个 Nginx 正向代理服务器,允许客户端通过该代理服务器访问外网。
# 编辑 nginx.conf 文件
server {
listen 8080; # 监听的端口
location / {
proxy_pass http://$host$request_uri;
proxy_set_header Host $host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0k;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_next_upstream error timeout invalid_header http_502;
}
}
配置说明:
listen 8080
:指定 Nginx 正向代理服务器监听的端口为 8080。proxy_pass http://$host$request_uri
:将客户端的请求转发到目标服务器。proxy_set_header Host $host
:设置请求头中的Host
字段,确保目标服务器能正确识别请求的主机。
反向代理配置
假设我们有一个内部服务器 192.168.1.100:8080
,我们要配置 Nginx 作为反向代理服务器,将客户端的请求转发到该内部服务器。
# 编辑 nginx.conf 文件
server {
listen 80; # 监听的端口
server_name example.com; # 域名
location / {
proxy_pass http://192.168.1.100:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
配置说明:
listen 80
:指定 Nginx 反向代理服务器监听的端口为 80。server_name example.com
:指定域名,客户端通过该域名访问反向代理服务器。proxy_pass http://192.168.1.100:8080
:将客户端的请求转发到内部服务器。proxy_set_header
:设置请求头信息,将客户端的真实 IP 地址传递给内部服务器。
负载均衡配置
假设我们有两个内部服务器 192.168.1.100:8080
和 192.168.1.101:8080
,我们要配置 Nginx 作为负载均衡器,将客户端的请求均匀地分配到这两个服务器上。
# 编辑 nginx.conf 文件
http {
upstream backend {
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
server {
listen 80;
server_name example.com;
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
:定义一个名为backend
的上游服务器组,包含两个内部服务器。proxy_pass http://backend
:将客户端的请求转发到backend
上游服务器组,Nginx 会根据默认的轮询算法将请求均匀地分配到两个服务器上。
配置生效
在完成上述配置后,需要重新加载 Nginx 配置文件,使配置生效。可以使用以下命令:
nginx -s reload