Nginx location 配置 后路径映射问题 (路径替换),反向代理路径加不加“/“

nginx 配置 proxy_pass时可以实现URL路径的部分替换。

1.proxy_pass的目标地址,默认不带/,表示只代理域名,url和querystring部分不会变(把请求的path拼接到proxy_pass目标域名之后作为代理的URL)

2.如果在目标地址后增加/,则表示把path中location匹配成功的部分剪切掉之后再拼接到proxy_pass目标地址

例子:

server {
    access_log  /home/access.log;
    error_log   /home/error.log;
        server_name h5.xxx.com;
        location  /abc {
                proxy_pass http://server_url;
        }

       location  /abc {
                proxy_pass http://server_url/;
        }
 }

比如请求 /abc/b.html

如上两个匹配成功后,实际代理的目标url分别是

http://server_url/abc/b.html (把/abc/b.html拼接到http://server_url之后)

http://server_url/b.html (把/abc/b.html的/abc去掉之后,拼接到http://server_url/之后)

 

### Nginx Location 配置中的绝对路径与相对路径区别 当涉及到Nginx `location`配置用于转发请求时,理解如何正确使用绝对路径和相对路径至关重要。 #### 绝对路径配置 对于绝对路径配置,在定义`location`指令时指定完整的URL路径。这种情况下,无论客户端发起请求的具体位置是什么,只要匹配该路径模式就会触发相应的处理逻辑。例如: ```nginx server { listen 80; location /static/images/index.png { alias /var/www/html/static/images/; } } ``` 上述配置表示任何针对`http://yourdomain.com/static/images/index.png`的请求都会映射到服务器上的`/var/www/html/static/images/`目录下查找资源[^1]。 #### 相对路径配置及其局限性 相比之下,相对路径是指在`location`中仅提供部分路径信息而不包含根节点的情况。然而需要注意的是,在Nginx内部实现上并不存在真正意义上的“相对路径”,因为即使看起来像是指定了相对路径,实际上这些路径也会基于监听地址自动补全成完整形式。这可能导致某些场景下的行为不符合预期,比如跨域重定向失败等问题[^2]。 考虑如下示例: ```nginx server { listen 80; location /new/ { rewrite ^(.*)$ /old/$1 permanent; } } ``` 尽管这里的`/new/`看似是一个相对路径,但在实际应用过程中它会被视为相对于当前主机名的一个固定入口点,并且返回给浏览器的响应头仍然携带了完整的URL作为目标地点。 #### 正确运用绝对路径与相对路径的方法 为了确保最佳实践,建议遵循以下原则来决定何时采用哪种类型的路径: - **优先选用绝对路径**:特别是在涉及静态文件服务或反向代理的情况下,明确指出源文件所在的确切物理位置可以减少歧义并提高性能。 - **谨慎对待伪“相对路径”**:由于所谓的相对路径实际上是通过默认规则转换而来的绝对路径,因此应当特别注意其可能带来的副作用,尤其是在多级子域名结构或是存在多个虚拟站点部署环境中。 另外值得注意的一点是在进行反向代理设置时,关于是否应在`location`语句后面附斜杠以及对应的`proxy_pass`参数是否有斜杠也会影响最终的结果[^4]。 ```nginx # 请求 http://example.com/app/test 将被转发到 http://backend/app/test location /app { proxy_pass http://backend/; } # 请求 http://example.com/app 将只被转发至 http://backend/ location /app/ { proxy_pass http://backend/; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值