Nginx 可以作为非常强大的反向代理服务器,下面是一个简单的 Nginx 反向代理的配置示例以及对应的详细解释:
nginx
Copy code
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
listen 80;
server_name www.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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
配置解释
http 块:
这是 Nginx 配置中的顶级块,用于包含 HTTP 服务器的配置。
upstream backend 块:
这个块定义了一个名为 backend 的服务器组,可以包含一个或多个服务器。
server backend1.example.com; 和 server backend2.example.com; 行指定了组成这个服务器组的后端服务器的地址。这些服务器可以是其他 Nginx 服务器,也可以是任何能够处理 HTTP 请求的服务器。
server 块:
这个块定义了一个虚拟服务器,用于处理进入的 HTTP 请求。
listen 80; 行告诉 Nginx 在端口 80 上监听请求,这是 HTTP 的默认端口。
server_name www.example.com; 行定义了服务器的域名。
location / 块:
location 块用于定义当请求匹配特定模式时应如何处理这些请求。在这个例子中,/ 指的是匹配所有请求。
proxy_pass http://backend; 行指定将请求转发到名为 backend 的上游服务器组。这意味着所有到达此 Nginx 服务器的 HTTP 请求都会被转发到 backend1.example.com 或 backend2.example.com。
proxy_set_header 指令:
这些指令用于修改或添加传递给后端服务器的 HTTP 请求头。
Host $host; 将请求头中的 Host 设置为客户端请求中的 Host 值。
X-Real-IP $remote_addr; 添加了一个自定义请求头,包含客户端的 IP 地址。
X-Forwarded-For $proxy_add_x_forwarded_for; 添加了一个请求头,包含原始请求的 IP 地址链。这对于在后端服务器上记录正确的客户端 IP 地址很重要。
X-Forwarded-Proto $scheme; 添加了一个请求头,标明了客户端是使用 HTTP 还是 HTTPS 协议。
通过上述配置,Nginx 会将所有到达 www.example.com 的请求转发到两个后端服务器之一,并保持客户端的原始 IP 地址和其它相关信息,使得后端服务器能够获取到正确的客户端信息。