4

我的机器上运行着一个 nginx (:80) 和一个上游服务器 (:8080)。

  • 我想将所有对 /assets/(*.?) 的请求代理到上游的 /upstream/$1 位置。
  • 上游服务器将 (302) /upstream/file_id 重定向到 /real/file/location.ext

这是我的代码:

location /assets/ {
    rewrite ^/assets/(.*) /upstream/$1 break;
    proxy_pass http://127.0.0.1:8000;
}

这似乎可行,但在客户端我得到了重定向的位置:

http://myserver.com/real/file/location.ext

我有点想隐藏它以使其保持不变:

http://myserver.com/assets/file_id

这背后的想法是让上游服务器找到真实文件的位置,但让 nginx 服务文件而不泄露其真实位置。这甚至可能吗?

4

1 回答 1

-1

首先你在proxy_pass中使用8000,但你提到你的端口是8080。

其次,删除 rewrite 行应该可以解决问题,因为您实际上在这里使用了 rewrite 规则并且永远不会到达 proxy_pass 行。像下面这样的东西应该可以工作:

location /assets/ {
    include proxy_params;
    proxy_pass http://127.0.0.1:8080;
}

还有 proxy_rewrite 和 proxy_redirect 命令可以帮助您让 nginx 在内部处理这个上游重定向。

希望有帮助!

于 2013-09-10T11:25:52.790 回答