常规博客是,先讲自己的经历,然后再啰嗦一段话,并且再穿插一些自己的感想之类的。
不, 我的博客力求最高效率。
需求: 把 URL 中带 /proxy/ 的统统转发至另外的机子。
1.【 loacation 块中存在 ~* 则proxy_pass的URL不能带 / 。】
如下,会报错
location ~* /proxy/ {
proxy_pass http://192.168.79.133/; # 这儿带 /
}
但可以这样写
location ^~ /proxy/ {
proxy_pass http://192.168.79.133/;
}
或者这样写
location /proxy/ {
proxy_pass http://192.168.79.133/;
}
而以下这种写法,需要完全的指定其地址。
($1)只匹配到它的第一匹配项,而匹配项是存在多个的, “(.)” 里需要写上非常明确的URL,下列仅作演示。
location ~* /proxy/(.) {
proxy_pass http://192.168.79.133/($1);
}
2.【proxy_pass的未尾,只要含 /, 就一定是alias 拼接URL。】
location /proxy/ {
proxy_pass http://192.168.79.133;
}
# www.a.com/proxy/abc -> 192.168.79.133/proxy/abc;
location /proxy/ {
proxy_pass http://192.168.79.133/;
}
# www.a.com/proxy/abc -> 192.168.79.133/abc;
location /proxy/ {
proxy_pass http://192.168.79.133/567;# 不管/在不在末尾,除去http://这部分的/外,只要带/ 就是拼接。
}
# www.a.com/proxy/abc -> 192.168.79.133/567abc;
下列的这个是猜测, 我本人未测试,根据上面的规律猜测的。
这个是猜测,未经测试
location /proxy {
proxy_pass http://192.168.79.133/;
}
# www.a.com/proxy/abc -> 192.168.79.133//abc;
#个人观察, 其规律是 192.168.79.133/ 拼接 /proxy/abc 中的除去 /proxy 的部分剩下的 /abc, 即 192.168.79.133/ 拼接 /abc ,即成192.168.79.133//abc . 这种情况下, sudo nginx -s reload 会明确告诉你有问题。