当 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;
        }
    }
}
目录
相关文章
|
3月前
|
JSON 应用服务中间件 API
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
98 1
|
18天前
|
应用服务中间件 nginx
nginx进行反向代理的配置
在Nginx中设置反向代理的步骤:编辑`/etc/nginx/nginx.conf`,在http段加入配置,创建一个监听80端口、服务器名为example.com的虚拟主机。通过`location /`将请求代理到本地3000端口,并设置代理头。保存配置后,使用`sudo nginx -s reload`重载服务。完成配置,通过example.com访问代理服务器。
25 0
|
1月前
|
数据可视化 应用服务中间件 网络安全
简单易用的Nginx代理管理工具:体验便捷配置、高效管理
Nginx Proxy Manager是一款强大的代理服务器管理工具,提供简单直观的界面来配置和管理Nginx代理服务器,帮助用户轻松提升配置的简洁性和便捷性。
53 0
简单易用的Nginx代理管理工具:体验便捷配置、高效管理
|
1月前
|
NoSQL 关系型数据库 MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
224 0
|
1月前
|
负载均衡 应用服务中间件 Linux
|
2月前
|
tengine Rust 负载均衡
反向代理学习笔记(一) Nginx与反向代理绪论
反向代理学习笔记(一) Nginx与反向代理绪论
|
2月前
|
负载均衡 Java 应用服务中间件
|
2月前
|
消息中间件 关系型数据库 MySQL
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
63 0
|
测试技术 应用服务中间件 nginx
Nginx目录文件列表显示
项目中使用了tomcat,Nginx,测试阶段,生产阶段经常会有些bug需要调查。 需要有些日志管理工具,在没有ELK的情况下,可以通过配置nginx来实现基本的日常查看。
940 0
|
26天前
|
运维 前端开发 应用服务中间件
LNMP详解(八)——Nginx动静分离实战配置
LNMP详解(八)——Nginx动静分离实战配置
28 0