正式环境发布后遇到一个问题: 通过HttpServletRequest的request.getScheme() + "://" + request.getServerName()获取到的是 http://127.0.0.1, nginx明明已经部署了ssl证书, 所以想要的结果是https://www.xxx.com
所以解决步骤如下:
nginx:
location /xxx-api {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:3009;
}
1,proxy_set_header Host $host 的作用是将客户端请求中的 Host 字段值传递到后端服务器,确保后端服务器能正确识别请求来源。
2,proxy_set_header X-Forwarded-Proto $scheme; 的作用是将客户端请求的协议类型(如 HTTP 或 HTTPS)通过 X-Forwarded-Proto 请求头传递给后端服务器。
我用的是springboot框架, 所以也是需要修改的
server.forward-headers-strategy: framework
server.forward-headers-strategy: framework该配置主要用于生产环境,确保后端服务能正确识别经由代理转发的请求细节。例如:
1,协议识别:恢复原始请求是否为HTTP或HTTPS
2,主机名解析:还原客户端请求的原始主机名
3,IP地址处理:处理X-Forwarded-For头部,记录客户端IP(需配合server.tomcat.remote-ip-header等参数进一步配置)