nginx代理,服务端获取到ip为127.0.0.1,请求协议为http处理方法

正式环境发布后遇到一个问题: 通过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等参数进一步配置)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。