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;
    
...其他内容
}
相关推荐
虾..4 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙4 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
玄斎4 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle
trayvontang5 小时前
Nginx之location配置
运维·nginx
十六年开源服务商6 小时前
WordPress定制开发最佳公司的用户画像
运维
世岩清上6 小时前
AI驱动的智能运维:从自动化到自主化的技术演进与架构革新
运维·人工智能·自动化
张童瑶7 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
石小千7 小时前
Linux安装OpenProject
linux·运维
Lime-30907 小时前
制作Ubuntu 24.04-GPU服务器测试系统盘
linux·运维·ubuntu
代码or搬砖7 小时前
Nginx详讲
运维·nginx·dubbo