Nginx重定向而不是使用proxy_pass进行反向代理

时间:2020-08-10 13:01:22

标签: nginx nginx-reverse-proxy nginx-config

我有一个在docker容器上运行的nginx,该容器为Web客户端提供服务。

我想代理来自客户端的请求,以便nginx将POST请求传递给服务器,因为客户端无法访问实际的目标端点。

这是位置指令:

location /zipkin {
  proxy_set_header X-Forwarded-For     $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Host    $host:$server_port;
  proxy_set_header X-Forwarded-Server  $host;
  proxy_set_header Host                $host;
  proxy_pass http://my-ip:9411/;
}

客户端向http://localhost:8080/zipkin/api/v2/span发出请求,我希望nginx将其(不重定向)传递给http://my-ip:9411/api/v2/span

在实践中发生的是,我收到301的响应(发送到http://localhost:8080/api/v2/span),并且POST从未发送到目的地。

编辑:另一次尝试返回404-

location /zipkin/ {
  rewrite ^/zipkin/(.*) /$1 break;
  proxy_pass http://my-ip:9411$uri; # tried 9411;, 9411/, 9411$uri, 9411$uri/
}

$uri/api/v2/span

1 个答案:

答案 0 :(得分:0)

最终的解决方案是:

location ~ ^/zipkin(/?)(.*) {
  proxy_pass http://my-ip:9411/$2;
}

我的尝试之一是^/zipkin(.*),但显然没有用。

/之后的/zipkin可能有问题,因此(/?)将其删除,
这样一来,(.*)的URL的干净部分就需要附加到proxy_pass ed的URL上。