首页 > 解决方案 > 如何在 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

解决方案


基于该 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,而是来自上游代理。


推荐阅读