乐闻世界logo
搜索文章和话题

Nginx 如何将 proxy_pass 与$ remote_addr 一起使用?

7 个月前提问
5 个月前修改
浏览次数27

1个答案

1

在配置Nginx作为反向代理服务器时,用于转发请求到后端服务器的proxy_pass指令通常与其它Nginx变量和模块结合使用,以提供更灵活的转发策略。其中,$remote_addr变量代表客户端的IP地址。如果你希望在转发请求时保持原始客户端IP地址,以便后端服务器可以获取到,你需要结合proxy_set_header指令使用。

下面是一个配置proxy_pass$remote_addr一起使用的例子:

nginx
server { 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 回复

你的答案