关于微服务多链路调用405(客户端通过nginx请求后端A,A通过调用B的nginx请求B的后端)

题目:

每个服务都有一个nginx承载,a服务由nginxa做承载,b服务由nginxb做承载,每个nginx都承载了一个前端服务,然后客户端通过nginxa来请求后端服务a ,然后再a服务内请求b服务,这个时候b服务返回405报错。

前置知识:

nginx相关:其一,默认请求前端静态资源时候是默认get请求,如果使用post请求就会抛405

其二,nginx收到请求以后回去匹配域名与location块中的域名,如果匹配不上默认会匹配location localhost 这个块。

贴一个比较好的解释

nginx405异常原因与解决方法,最详细解释-腾讯云开发者社区-腾讯云

好了,可以解释了,

1. 多层代理的Host头混乱

当请求在多层代理中传递时:

text

复制代码
原始请求(客户端→B):
Host: b.example.com

B应用发起新请求(调用C)时,拷贝了这些头:
Host: b.example.com  ← 错误!应该是C服务的域名

实际需要的是:
Host: c.internal.com 或 c.example.com

为什么会导致405?

  • C服务的Nginx根据Host头匹配server块

  • 如果匹配不到,可能会:

    • 使用默认server块(返回405)

    • 被防火墙/安全策略拦截

解决方式:第二次调用 干掉"host","connection","keep-alive","transfer-encoding","x-forwarded-host"

至于这些再链接中的意义后续有时间再整理贴出来。。。

相关推荐
say_fall2 小时前
【AI大模型】MCP 模型上下文协议:客户端-服务器架构、JSON-RPC 消息与能力协商、工具发现与调用链路、与函数调用的分工
服务器·人工智能·架构
木子欢儿5 小时前
国内 macOS/Linux 安装 rust
linux·运维·服务器·macos·rust
迪菲赫尔曼5 小时前
【基础篇 26】第一次在服务器完成训练:准备数据、断线继续、检查成果与备份
运维·服务器·人工智能·机器学习·计算机视觉
进击的荆棘5 小时前
Linux系统——线程同步与互斥
linux·运维·服务器·策略模式·同步·互斥·posix
.道阻且长.5 小时前
Linux基本开发工具:gdb和cgdb的使用
linux·运维·服务器·开发语言
叼烟扛炮6 小时前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习
Android系统攻城狮6 小时前
Linux FFmpeg深度解析之av_guess_format调用流程与实战(三十六)
linux·运维·服务器·ffmpeg·ffmpeg音视频进阶
进击的荆棘6 小时前
Linux系统——线程概念与控制之线程封装
linux·运维·服务器·线程
Csvn15 小时前
认识 Nginx
后端·nginx
天诰18 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程