题目:
每个服务都有一个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"
至于这些再链接中的意义后续有时间再整理贴出来。。。