首页 > 解决方案 > Nginx 重定向而不是使用 proxy_pass 进行反向代理

问题描述

我有一个在 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

标签: nginxnginx-reverse-proxynginx-config

解决方案


最终的解决方案是:

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

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

可能/后面/zipkin有问题,所以(/?)删除它,
然后留下(.*)需要附加到proxy_passed url 的 url 的干净部分。


推荐阅读