解决访问 https 网站时,后端重定向或获取 URL 变成 http 的问题

💡 原文中文,约3800字,阅读约需9分钟。
📝

内容提要

在 Nginx 反向代理 Java 应用时,需要处理 HTTPS 和 HTTP 的协议问题。通过设置 `proxy_set_header` 和 `X-Forwarded-Proto` 头,后端可以获取正确的 URL。重定向时,使用 `proxy_redirect` 修改响应头,以确保返回 HTTPS URL。如果前面有负载均衡器,需相应调整配置。

🎯

关键要点

  • Nginx 反向代理 Java 应用时需要处理 HTTPS 和 HTTP 的协议问题。
  • Nginx 配置示例中,Nginx 监听 443 端口处理 HTTPS 请求,转发给后端服务器。
  • HttpServletRequest.getRequestURL() 获取到的 URL 是 Nginx 与后端服务器之间的 HTTP URL。
  • 通过 proxy_set_header Host 指令将客户端请求的 Host 头传递给后端服务器。
  • 使用 X-Forwarded-Proto 头传递正确的协议给后端应用。
  • 后端应用需要通过过滤器修改 request 的 scheme,以获取正确的 URL。
  • 使用 Nginx 的 proxy_redirect 指令修改重定向 URL 的协议。
  • 如果 Nginx 前面有负载均衡器,需要在负载均衡器和 Nginx 之间添加 X-Forwarded-Proto 头。
  • Nginx 配置需要根据负载均衡器的协议进行相应调整。
➡️

继续阅读