如何在nginx中使用proxy_pass保持URL端口

时间:2018-12-03 16:08:53

标签: nginx

我正在尝试使用代理传递来访问图像服务,但是,我的nginx容器正在端口8080上运行,当nginx传递给服务时,它将用户重定向到端口80。 / p>

这是我的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;
}

我的卷曲请求示例:

➜  .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重定向到端口80

1 个答案:

答案 0 :(得分:2)

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