Nginx location 路径如何替换
第一种情况是:简单粗暴,URL直接拿过来就用。
1. 一般情况下:proxy_pass为目标地址,默认是不带 / 的; 表示只代理域名,url和参数部分不会变(nginx的做法是直接将原始的请求path直接拼接到代理服务的地址后,就是将nginx的ip和端口替换为具体服务的IP和端口,直接作为代理服务的URL)
第二种情况是:简单加工,path中剔除匹配到location的部分。
2. 另一种情况,在proxy_pass后加了 / ; 这样nginx的处理逻辑是剔除path中包含location的部分(nginx的做法是,是把path和location中匹配成功的部分裁剪调后,将新的URL拼接到proxy_pass目标地址后面)
例子:第二种情况
原始访问路径: http://ip1:port1/x1/x2/search/search_tips?text=
server {
location ^~/x1/x2/ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass "http://ip2:port2/"; # port2 后面加 / 和 不加 / 处理逻辑完全不一样。注意
proxy_redirect http://$host/ http://$http_host/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
经过nginx上述配置后 访问路径:http://ip2:port2/search/search_tips?text=
1. 一般情况下:proxy_pass为目标地址,默认是不带 / 的; 表示只代理域名,url和参数部分不会变(nginx的做法是直接将原始的请求path直接拼接到代理服务的地址后,就是将nginx的ip和端口替换为具体服务的IP和端口,直接作为代理服务的URL)
第二种情况是:简单加工,path中剔除匹配到location的部分。
2. 另一种情况,在proxy_pass后加了 / ; 这样nginx的处理逻辑是剔除path中包含location的部分(nginx的做法是,是把path和location中匹配成功的部分裁剪调后,将新的URL拼接到proxy_pass目标地址后面)
例子:第二种情况
原始访问路径: http://ip1:port1/x1/x2/search/search_tips?text=
server {
location ^~/x1/x2/ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass "http://ip2:port2/"; # port2 后面加 / 和 不加 / 处理逻辑完全不一样。注意
proxy_redirect http://$host/ http://$http_host/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
经过nginx上述配置后 访问路径:http://ip2:port2/search/search_tips?text=