nginx x-accel-redirect上"location"和"proxy_pass"的不同行为



我有我的nginx会议,如下所示:

location ^~ /mount_points/mount_point1 {
  internal;
  alias /repos/mount_point_one;
}
location ^~ /to_proxy {
  internal;
  proxy_pass http://myproxy:5000;
}

当我请求"http://localhost/mount_points/mount_point1/myfile.zip"时,我按预期得到"/repos/mount_point_one/myfile.zip"。

在请求"http://localhost/to_proxy/myfile2.html"时,我得到"http://myproxy:5000/to_proxy/myfile2.html"。

在第一种情况下,"/mount_points/mount_point1"部分被删除,在第二种情况下,"/to_proxy"部分仍然存在,我必须在上游服务器中伪造一个"/to_proxy"地址才能找出这一点。

我错过了什么吗?如果我只需要重写 url,如何删除上游服务器的"/to_proxy"部分问题?

谢谢。

proxy_pass 指令可以执行别名功能,但前提是提供了可选的 URI。

location ^~ /to_proxy/ {
    internal;
    proxy_pass http://myproxy:5000/;
}

为了使别名映射正常工作,还会在 location 参数中添加尾随/

有关详细信息,请参阅此文档。

如果 location 参数上的尾随/导致问题,则可以改用rewrite ... break

location ^~ /to_proxy {
    internal;
    rewrite ^/to_proxy(?:/(.*))?$ /$1 break;
    proxy_pass http://myproxy:5000;
}

相关内容

  • 没有找到相关文章

最新更新