"location" 和 "proxy_pass" 在 nginx x-accel-redirect 上的不同行为
Different behavour of "location" and "proxy_pass" on nginx x-accel-redirect
我的 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', I get "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
参数添加了尾随 /
。
详情见this document。
如果 location
参数的尾随 /
导致问题,您可以改用 rewrite ... break
:
location ^~ /to_proxy {
internal;
rewrite ^/to_proxy(?:/(.*))?$ / break;
proxy_pass http://myproxy:5000;
}
我的 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', I get "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
参数添加了尾随 /
。
详情见this document。
如果 location
参数的尾随 /
导致问题,您可以改用 rewrite ... break
:
location ^~ /to_proxy {
internal;
rewrite ^/to_proxy(?:/(.*))?$ / break;
proxy_pass http://myproxy:5000;
}