如何使用 Nginx 将请求传递到不同的 IP 地址

如何使用 Nginx 将请求传递到不同的 IP 地址

我对 nginx 还很陌生,想做一些事情(但目前失败了),但我不知道这是否可以通过 nginx 实现。我的 nginx 设置了 SSL,当客户端调用它时,还会传递实际服务器的 IP,该服务器应处理请求并发回响应。

上游服务器位于不同的服务器上,我不知道它的 IP 是什么。因此请求传递目标 IP,并且目标 IP 使服务器在端口 80 上运行。上游 ip 没有 URI /gotoserver ,它只是为了让 nginx 知道它必须获取名称参数并将调用传递给适当的服务器。

#this is where nginix is running with SSL on
server 
 {
  server_name  myserver.com;
  listen 443;
ssl on;
ssl_certificate  pathtocert;
ssl_certificate_ke keypath ;
#I want nginix to route the call ip x.x.x.x 
# which is being passed as request parameter named 'name'
location  /gotoserver?name=x.x.x.x
{
  set dserver $arg_name
  proxy_pass http://dserver:80

}
}

使用上述配置,它会到达服务器,但看起来它正在将 /gotoserver 传递给上游,而该服务器不知道该 URI。如果我在 proxy_pass 中硬编码 IP,它就可以工作

location /
 {
   proxy_pass http://X.X.X.X:80
 }

谢谢任何关于如何使其工作的指点,如果我遗漏了一些细节,我深感抱歉。

答案1

nginx 仅匹配指令$request_uri中的规范化内容location。因此它无法匹配查询参数。请尝试以下操作:

location /gotoserver {
    proxy_pass $arg_name:80;
}

但是,这种方法并不是最佳的,因为没有对参数进行验证name,并且可能存在许多无效值。还可能存在安全隐患。

相关内容