我有一个在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
。
答案 0 :(得分:0)
最终的解决方案是:
location ~ ^/zipkin(/?)(.*) {
proxy_pass http://my-ip:9411/$2;
}
我的尝试之一是^/zipkin(.*)
,但显然没有用。
在/
之后的/zipkin
可能有问题,因此(/?)
将其删除,
这样一来,(.*)
的URL的干净部分就需要附加到proxy_pass
ed的URL上。