nginx 反向代理使用变量的坑

nginx采用反向代理的时候使用变量的坑

正常情况:

conf 复制代码
location ~ ^/prod-api(?<rest>/.*)?$ {
    # 假设 $mes_backend 形如: http://127.0.0.1:16889
    proxy_pass $mes_backend$rest$is_args$args;

    proxy_http_version 1.1;
    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # WebSocket 支持
    proxy_set_header Upgrade           $http_upgrade;
    proxy_set_header Connection        $connection_upgrade;

    # 可选:更稳的请求体转发
    proxy_request_buffering on;
    client_max_body_size 10m;
    proxy_read_timeout 60s;
}

如果你使用变量,仍会把请求转到后端的根路径(或保留了错误的前缀)

预期是 http://域名/prod-api/XXX 到后端是 http://localhost:16888/XXX

实际上到后端是 http://localhost:16888/prod-api/XXX

复制代码
set $mes_backend http://127.0.0.1:16889;

location /prod-api/ {
	proxy_pass $mes_backend;
	
	... 其他代理内容
}

正确写法

复制代码
location ~ ^/prod-api(?<rest>/.*)$ {
  # proxy_pass http://127.0.0.1:16889/;
  # 采用变量的形式,如果是常量的形式就没有这种异常
  proxy_pass $mes_backend$rest;
    
...其他内容
}
相关推荐
kabu_Charlie2 分钟前
使用Docker运行python程序
运维·docker·容器
cyber_两只龙宝9 分钟前
【Keepalived】抢占模式、延迟抢占模式与非抢占模式详解
linux·运维·服务器·keepalived
劳埃德福杰25 分钟前
【Kylin银河麒麟】文件系统磁盘空间满导致无法进入操作系统
运维·服务器·电脑·笔记本电脑·kylin
逻辑峰34 分钟前
ReadStat在Linux的安装和使用
linux·运维·服务器
Lsir10110_1 小时前
【Linux】序列化与反序列化——网络计算器的实现
linux·运维·网络
脆皮的饭桶1 小时前
给负载均衡做高可用的工具Keepalived
运维·服务器·负载均衡
袁小皮皮不皮1 小时前
【HCIA】第三章TCP/IP协议栈中其他主要协议
运维·服务器·网络·网络协议·tcp/ip
头孢头孢1 小时前
效率提升 10 倍!我用 OpenClaw 实现了工作自动化
运维·自动化
Agent产品评测局1 小时前
中国龙虾ai软件有哪些选择?2026自动化选型指南
运维·人工智能·ai·chatgpt·自动化
思麟呀2 小时前
应用层自定义协议与序列化
linux·运维·服务器·网络·c++