我对 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
,并且可能存在许多无效值。还可能存在安全隐患。