Nginx代理重定向而不更改url

Nginx代理重定向而不更改url,nginx,Nginx,我有一个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;

我有一个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在不泄露其真实位置的情况下提供文件。这可能吗?

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

第二,删除重写行应该可以做到这一点,因为您实际上在这里使用重写规则,并且永远不会到达代理传递行。类似于以下的方法应该可以工作:

location /assets/ {
    include proxy_params;
    proxy_pass http://127.0.0.1:8080;
}
还有proxy_rewrite和proxy_redirect命令,可以帮助您在nginx内部处理这个上游重定向

希望有帮助