栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

nginx中proxy

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

nginx中proxy

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; 
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号