Nginx 配置代理主要涉及到两种类型的代理:HTTP 代理和 TCP/UDP 代理(通过 Nginx 的 stream 模块)。下面我将分别介绍这两种代理的配置方法。
Http是一种位于客户端和目标服务器之间的中间服务器,它接收客户端的HTTP请求,然后将这些请求转发给目标服务器,并将从目标服务器收到的响应返回给客户端。HTTP代理在客户端和目标服务器之间充当了一个“中间人”的角色,可以执行多种功能,包括但不限于请求过滤、缓存、负载均衡、匿名性保护等。
在实际应用中,HTTP代理经常被用于构建VPN(虚拟私人网络)、Web爬虫、内容分发网络(CDN)等系统。
具体配置
http {
# ... 其他 http 配置 ...
server {
listen 80; # 监听80端口
server_name example.com; # 服务器名
location / {
# 代理设置
proxy_pass http://backend_server; # 后端服务器地址,可以是IP或域名加端口
# 转发请求头
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 其他可选配置,如超时设置
proxy_connect_timeout 30s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# 如果后端服务器也是 HTTPS,则需要以下配置
# proxy_ssl_trusted_certificate /path/to/trusted/ca_certificates.pem;
# proxy_ssl_verify on;
}
# 其他 location 配置 ...
}
# 可以在 http 块中定义 upstream
upstream backend_server {
server backend1.example.com:8080;
server backend2.example.com:8080 backup; # 备用服务器
# 负载均衡算法,默认为轮询(round-robin)
# least_conn; # 使用最少连接的服务器
}
# ... 其他 http 配置 ...
}
在这个例子中,upstream块定义了一个名为backend_server的服务器组,该组包含了一个或多个后端服务器的地址。然后,在server块的location /指令中,使用proxy_pass指令将这个位置的请求转发到backend_server指定的后端服务器(或服务器组)上。
请注意,upstream块是可选的,如果你只需要代理到一个固定的后端服务器,可以直接在proxy_pass指令中指定该服务器的地址和端口。但是,使用upstream块可以让你更灵活地配置负载均衡、健康检查等高级功能。
另外,proxy_set_header指令用于设置转发给后端服务器的请求头,这对于确保后端服务器能够正确地识别和处理请求非常重要。例如,Host请求头通常用于虚拟主机配置,而后端服务器可能需要根据这个头来决定返回哪个站点的响应。X-Real-IP和X-Forwarded-For请求头则用于记录客户端的真实IP地址,这在后端服务器需要知道客户端的真实IP地址时非常有用。