nginx中proxy_pass替换规则

nginx一个常用的功能就是作为反向代理服务器,涉及到的一个语法就是proxy_pass,作用是将匹配的请求转发到特定的后端服务器,但这个语法在转发过程中有可能会对请求的uri进行更改,下面我们就来说一下proxy_pass转发时的uri替换规则。

这里依旧粗略的了解一下网址的组成,假设有个网址链接为 http://192.168.1.1:8080/abc/ABC.html ,那么http则是协议,192.168.1.1 是主机 , 8080是端口 , /abc/ABC.html 则是uri 

重点仍然是uri部分,下面先上相关官网文档链接

Module ngx_http_proxy_module

直接拿官方例子说明一下

最常见的两种情况:

第一种:

location /name/ {
    proxy_pass http://127.0.0.1/remote/;
}
上面的proxy_pass语法后存在 uri,也就是标红的部分,当客户端访问的请求为 http://192.168.1.1/name/WhoAreYou/where.html,那么经由上面的配置后,nginx会将请求变成http://127.0.0.1/remote/WhoAreYou/where.html然后进行发送。也就是会进行相应的uri替换。


第二种:

location /name/ {
    proxy_pass http://127.0.0.1;
}

而以上的情况下,由于proxy_pass语法后没有 uri,那么将会拼接原始的uri进行转发,也就是客户端访问的请求为 http://192.168.1.1/name/WhoAreYou/where.html,nginx发送的请求 http://127.0.0.1/name/WhoAreYou/where.html

但是在某些条件下,替换的uri是没办法确定的:

1、匹配的location是正则表达式类型的,

proxy_pass后边的链接不能包含uri

2、在proxy_pass之前匹配rewirte规则重写了uri,将使用相同的配置来处理请求 ( break),这种情况下,即使proxy_pass后边包含了uri也会被忽略,但是如果不匹配rewrite规则,则按照常规的第二种处理方式一致。

location /name/ { 
    rewrite /name/(.*)\.html /users?name=$1 break; 
    proxy_pass http://127.0.0.1/whoami/; 
}

例如http://192.168.1.1/name/WhoAreYou/where.html访问后会转换成http://127.0.0.1/users?name=WhoAreYou/where

但http://192.168.1.1/name/WhoAreYou/where.txt访问后会转换成http://127.0.0.1/whoami/WhoAreYou/where.txt

3、在proxy_pass语法中使用了变量,那么这种情况跟常规的第二种处理方式是一样的

location /name/ { 
    proxy_pass http://127.0.0.1$request_uri; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值