nginx - 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
。
解决方案
最终的解决方案是:
location ~ ^/zipkin(/?)(.*) {
proxy_pass http://my-ip:9411/$2;
}
我的尝试之一是,^/zipkin(.*)
但它显然没有奏效。
可能/
后面/zipkin
有问题,所以(/?)
删除它,
然后留下(.*)
需要附加到proxy_pass
ed url 的 url 的干净部分。
推荐阅读
- mysql - 未加载插件“my_root_password”
- python - 如何在 matplotlib 子图上打开刻度标签?
- python - (PyQt5) QThread 是一个抽象类吗?
- ios - 如何从模型数据 Swift 创建 JSON 字符串?
- scala - 在 http4s 的中间件中获取 cookie?
- html - WebP 图像类型未在 ios 设备 chrome 浏览器上显示
- python - 将带有内置 MySQL 函数的查询转换为 flask-sqlalchemy
- java - 尝试与端点通信时无法识别 WSDL 类型
- python - Dart 相当于 Python zip 和列表推导,用于从两个列表生成小部件列表
- css - 四个相同的类通过伪选择器接收四种不同的样式