nginx - 如何在 nginx 中使用 proxy_pass 保留 url 端口
问题描述
我正在尝试使用代理传递来访问图像服务,但是,我的 nginx 容器在端口上运行8080
,当 nginx 传递给服务时,它将用户重定向到端口80
。
这是我的 nginx 片段:
location /api/Image/ {
proxy_pass http://image.service.com/api/Image?$args;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
我的 curl 请求示例:
➜ .ssh curl -I http://local.docker:8080/api/Image\?urlId\=s4U3y%2FjS%2FPqDJjS%2BQzOjOu4PvCLx8QQQmwd2%2BwTT8C8%3D
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 03 Dec 2018 16:01:18 GMT
Content-Type: text/html
Content-Length: 178
Location: http://local.docker/api/Image/?urlId=s4U3y%2FjS%2FPqDJjS%2BQzOjOu4PvCLx8QQQmwd2%2BwTT8C8%3D
Connection: keep-alive
Strict-Transport-Security: max-age=63072000; includeSubdomains;
X-UA-Compatible: IE=Edge
我的最终目标是添加一个jpg
后缀,但我的主要问题是我无法弄清楚如何防止 nginx 重定向到 port 80
。
解决方案
基于该 NGINX 块,您将需要请求包含尾部斜杠的 URL。
NGINX 块将匹配 URL,如下所示:
/api/Image/foo/bar
/api/Image/
但不是
/api/Image
这就是您的 cURL 命令的构造方式:
curl http://local.docker:8080/api/Image\?urlId\=s4U3y%2FjS%2FPqDJjS%2BQzOjOu4PvCLx8QQQmwd2%2BwTT8C8%3D
重定向很可能来自默认块,我猜它根本不是来自 NGINX,而是来自上游代理。
推荐阅读
- opengl - 如何在 OpenGL 中正确绘制 3D 轴?
- python - 在 Python 中从标准输入读取 CSV 文件并进行修改
- node.js - 如何发送和接收对机器人的回复
- vue.js - 具有多个插槽的 Vue.js 动态布局无渲染组件布局
- c++ - 如何告诉 g++ 链接器在 x86-64 程序集(目标文件)中实现了外部添加函数?
- javascript - 如何在 ReactJS 上渲染到保持相对路径的 html 文件(及其图像)?
- python - OSMnx:在交互式网络地图上绘制网络,每个基础设施使用不同的颜色
- typescript - Promise.resolve().then( 与 Promise.resolve(
- reactjs - 在 react 中使用来自 graphql 的数据设置状态
- dart - 我现有项目中使用的 dart 版本