ngin配置ssl https代理后端tomcat http请求时,会自动跳回http并报错:400 Bad Request The plain HTTP request was sent to HTTPS port
解决方案:添加参数
1)proxy_redirect参数;
这个参数主要用来改从被代理服务器传来的应答头中的"Location"和"Refresh"字段。
在此处配置为proxy_redirect http:// $scheme://;
作用是将从tomcat中返回的http修改为https。
2)port_in_redirect参数;
这个参数的作用是启用或禁用在由nginx发布的绝对重定向中指定端口。
此处配置为port_in_redirect on;
作用是在nginx反向代理跳转到tomcat时将跳转到的端口替换为nginx监听的端口。
3)proxy_set_header 参数
此处配置为 proxy_set_header Host $host:$server_port;
此处设置为proxy_set_header Host $host:$server_port;的作用是将请求的报文的头部的客户端的ip更改为当前作为反向代理的nginx的监听的ip及端口,这样后端的tomcat处理完请求时返回给nginx,再由nginx代理将结果返回给客户端。不然,后端服务处理完请求会直接返回到客户端,这样会导致客户端请求的https跳转为http,以及请求超时。