当 nginx 反向代理中使用变量会导致目录代理失效

简介: 踩坑笔记

遇到的坑

今天遇到个小坑,当 nginx 目录级别的代理使用了变量之后,目录代理则只会代理到拼接完的目录,不会目录递归代理。

http {
    server {
        listen 80;
        server_name example.com;

        location /topic/ {
            proxy_pass https: //nba.com/abc/topic/;
        }
    }
}

比如当我们访问 https: //example.com/topic/abc 则会代理请求 https: /nba.com/abc/topic/abc

当想通过变量来控制域名的时候,发现 https: //example.com/topic/abc 则会代理请求 https: //nba.com/abc/topic/

http {
    server {
        listen 80;
        server_name example.com;
        
        set $b_host  "nba.com";

        if ($host = "pre-example.com") {
            set $b_host "pre-nba.com";
        }

        location /topic/ {
            proxy_pass https://$b_host/abc/topic/;
        }
    }
}

优化方案

问题还是因为代理规则不够规范,换成^/topic/(.*)来匹配目录,则可以解决问题

http {
    server {
        listen 80;
        server_name example.com;
        
        set $b_host  "nba.com";

        if ($host = "pre-example.com") {
            set $b_host "pre-nba.com";
        }

        location ~ ^/topic/(.*) {
            proxy_pass https://$b_host/abc/topic/$1;
        }
    }
}
目录
相关文章
|
17天前
|
网络协议 应用服务中间件 网络安全
Nginx,正向代理
本文介绍了Nginx作为HTTPS正向代理的两种方案:HTTP CONNECT隧道(7层)和NGINX stream(4层)。HTTP CONNECT隧道需要客户端手动配置代理,通过CONNECT请求建立隧道;而NGINX stream则更适合透明代理,利用SNI字段实现流量转发。文章详细讲解了两者的原理、环境搭建、使用场景及常见问题,并提供了配置示例和最佳实践建议。内容转载自阿里云开发者社区@怀知的文章,推荐读者参阅原文获取更多信息。感谢您的阅读!
243 80
Nginx,正向代理
|
1月前
|
缓存 负载均衡 应用服务中间件
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇
通过使用Nginx的反向代理功能,可以有效地提高Web应用的性能、安全性和可扩展性。配置过程中需要注意不同场景下的具体需求,如负载均衡、SSL终止和缓存策略等。正确配置和优化Nginx反向代理可以显著提升系统的整体表现。
154 20
|
3月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
223 61
|
3月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
227 60
|
3月前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
301 60
|
2月前
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
190 11
|
2月前
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
100 5
|
应用服务中间件 nginx 容器
Nginx 变量漫谈(七)
在 (一) 中我们提到过,Nginx 变量的值只有一种类型,那就是字符串,但是变量也有可能压根就不存在有意义的值。没有值的变量也有两种特殊的值:一种是“不合法”(invalid),另一种是“没找到”(not found)。
1386 0
|
应用服务中间件 nginx Perl
Nginx 变量漫谈(一)
Nginx 的配置文件使用的就是一门微型的编程语言,许多真实世界里的 Nginx 配置文件其实就是一个一个的小程序。当然,是不是“图灵完全的”暂且不论,至少据我观察,它在设计上受 Perl 和 Bourne Shell 这两种语言的影响很大。
1559 0
|
应用服务中间件 nginx 容器
Nginx 变量漫谈(二)
关于 Nginx 变量的另一个常见误区是认为变量容器的生命期,是与 location 配置块绑定的。其实不然。我们来看一个涉及“内部跳转”的例子:     server {        listen 8080;         location /foo {            set $...
1092 0