1. 问题描述
我的dataflow数据流做nginx转发时,报错400,数据流url是
http://192.168.1.179:8119/dataflow_task/tasks/executions?page=0&size=30&name=data_calc
实际转发的是
http://10.20.30.40:9393/tasks/executions?page=0&size=30&name=data_calc
nginx.conf的配置如下:
upstream cemss_task{
server 10.20.30.40:9393;
}
// 中间省略...
location /dataflow_task/ {
proxy_pass http://dataflow_task/;
}
2. 解决方法
- 在location里加一句关于host的设置
后端真实的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败,报400错误
location /cemss_task/ {
proxy_pass http://cemss_task/;
proxy_set_header Host $http_host;
}
- 将名字的下划线改成横杠,总共改三个地方:
- 造成nginx访问不通的直接原因是location的名字带了下划线,如果url中有多级目录的话,用
/
或者-
都可以,但唯独不能用_
- 实际测试发现加反斜杠不行,考虑可能是触发service关键词
upstream cemss-task{
server 10.20.30.40:9393;
}
// 中间省略...
location /dataflow-task/ {
proxy_pass http://dataflow-task/;
}