upstream模块介绍
nginx的负载均衡功能依赖于ngx_http_upsteam_module模块,所支持的代理方式包括proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass和grpc_pass。
gx_http_upstream_module模块允许nginx定义一组或多组服务组,使用的可以通过proxy_pass代理方式把网站的请求发送到事先定义好的对应upstream组的名字上。upstream模块可以实现负载均衡,而且在一个节点故障的时候,配置了upstream时可以自动切换到正常工作的节点。
增加nginx配置后:
upstream data_server {
server 192.168.1.86:20001;
}原因:
- 直连后端(如 http://192.168.1.86:18295/xxx),浏览器或 postman 自动将 host 设为 192.168.1.86:18295,后端能识别。
- 走 nginx,如果不做特殊配置,nginx 默认将 host 设为 upstream 的名字(即 data_server)。后端收到 host: data_server,发现这不是一个合法的域名或 ip,直接报错 400。
解决方法:
在 location 中强制传递真实的 host 给后端。
location /data/ {
# 添加这一行,将客户端请求的原始 host 传递给后端
proxy_set_header host $host;
# 或者,如果后端服务监听的是特定端口且依赖端口,可以使用:
# proxy_set_header host $host:$server_port;
# ... 其他配置
proxy_pass http://data_server/ ;
}到此这篇关于nginx使用upstream后端接口报 400的文章就介绍到这了,更多相关nginx使用upstream报 400内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论