我的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”部分问题?
谢谢。
答案 0 :(得分:2)
proxy_pass
指令可以执行别名功能,但仅在提供可选URI时才会执行。
location ^~ /to_proxy/ {
internal;
proxy_pass http://myproxy:5000/;
}
要使别名映射正常工作,还会在/
参数中添加尾随location
。
有关详细信息,请参阅this document。
如果/
参数上的结尾location
导致问题,您可以使用rewrite ... break
代替:
location ^~ /to_proxy {
internal;
rewrite ^/to_proxy(?:/(.*))?$ /$1 break;
proxy_pass http://myproxy:5000;
}