在配置Nginx作为反向代理服务器时,用于转发请求到后端服务器的proxy_pass
指令通常与其它Nginx变量和模块结合使用,以提供更灵活的转发策略。其中,$remote_addr
变量代表客户端的IP地址。如果你希望在转发请求时保持原始客户端IP地址,以便后端服务器可以获取到,你需要结合proxy_set_header
指令使用。
下面是一个配置proxy_pass
与$remote_addr
一起使用的例子:
nginxserver { listen 80; server_name example.com; location / { # 转发请求到后端应用服务器 proxy_pass http://backend_upstream; # 设置HTTP头,将客户端的原始IP传递给后端服务器 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 其他可能需要设置的头信息 proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; # 以下是一些代理设置,用于维持HTTP头信息和处理超时等 proxy_http_version 1.1; proxy_set_header Connection ""; proxy_buffering off; proxy_request_buffering off; proxy_read_timeout 90; } } # 后端服务器组配置 upstream backend_upstream { server backend1.example.com; server backend2.example.com; }
在这个例子中,当Nginx接收到对example.com
的请求时,它会将请求转发到backend_upstream
,这是一个由两个后端服务器组成的上游服务器组。同时,通过proxy_set_header
指令,原始的客户端IP $remote_addr
被添加到了请求头X-Real-IP
中,而X-Forwarded-For
中维持了一个客户端IP的链表,用于记录请求链路中的每个代理服务器的IP。
这样,后端服务器就可以从X-Real-IP
或者X-Forwarded-For
头信息中获取到客户端的真实IP地址。这对于记录日志、进行地理位置分析、限流、访问控制或者其他需要知道客户端原始IP的场景都非常有用。
2024年6月29日 12:07 回复