繁体   English   中英

Spring-boot 在命中 localhost 与主机 ip 时重定向不同

[英]Spring-boot redirects differently when hitting localhost vs host ip

我有一个 Java 8 Spring Boot (1.5.13) Web 服务器,位于 AWS Application Load Balancer 后面。 ALB 执行 TLS 终止。

Web 服务器出于各种原因重定向用户(例如,到登录页面)。 docs中所述,我已在application.properties server.use-forward-headers设置为true ,以便使用X-Forwarded-ProtoHost标头正确重定向到外部 (https) url。

此设置适用于主机 1,但(几乎)相同的设置不适用于主机 2。在主机 2 上,我已将其缩小到以下范围。 如果我卷曲localhost一切正常,但如果我卷曲172.32.1.1 (主机 2 的 ip)则不行。

下面的两个命令都在主机 2 上运行。关于可能导致响应差异的任何想法? (http 与 https)

[ec2-user@ip-172-32-1-1 ~]$ curl -v localhost:8080 -H "X-Forwarded-Proto: https" -H "X-Forwarded-Port: 443" -H "Host: example.com"
*   Trying 127.0.0.1:8080...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.79.1
> Accept: */*
> X-Forwarded-Proto: https
> X-Forwarded-Port: 443
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 
< Set-Cookie: SESSION=6a9d14f0-07f6-4f73-ae31-8232f2d9de5d; Path=/; Secure; HttpOnly
< Location: https://example.com/login
< Content-Length: 0
< Date: Wed, 21 Dec 2022 21:43:28 GMT
< 
* Connection #0 to host localhost left intact
[ec2-user@ip-172-32-1-1 ~]$ curl -v 172.32.1.1:8080 -H "X-Forwarded-Proto: https" -H "X-Forwarded-Port: 443" -H "Host: example.com"
*   Trying 172.32.1.1:8080...
* Connected to 172.32.1.1 (172.32.1.1) port 8080 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.79.1
> Accept: */*
> X-Forwarded-Proto: https
> X-Forwarded-Port: 443
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 
< Set-Cookie: SESSION=cbf4800a-15a8-460a-a3db-d6e3c21c046e; Path=/; HttpOnly
< Location: http://example.com/login
< Content-Length: 0
< Date: Wed, 21 Dec 2022 21:42:50 GMT
< 
* Connection #0 to host 172.32.1.1 left intact

主机 1 和主机 2 使用相同的 VM 映像和 WAR 文件。 在主机 1 上,上面的 2 个命令都按预期响应 https。

可能有很多不同的东西。 这是我会从头顶上看的地方。

  • 防火墙
  • /etc/主机
  • 证书
  • 看看nics,app绑定的一样吗(0.0.0.0)

问题是 Host1 的 VPC (172.31.xx) 和 Host2 的 VPC (172.32.xx) 之间的 IP 差异

server.tomcat.internal-proxies的默认值匹配 172.31.*,但不匹配 172.32.* - 导致主机 2 中忽略X-Forwarded标头。更新属性修复了它。

默认

server.tomcat.internal-proxies=10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3} \.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3}|127\.\d{1,3}\.\d{1, 3}\.\d{1,3}|172\.1[6-9]{1}\.\d{1,3}\.\d{1,3}|172\.2[0- 9]{1}\.\d{1,3}\.\d{1,3}|172\.3[0-1]{1}\.\d{1,3}\.\d{ 1,3}

更新

server.tomcat.internal-proxies=(127\.\d{1,3}\.\d{1,3}\.\d{1,3})|(172.32.\d{1,3}\ .\d{1,3})

我遇到的一些有用的事情: 这里有一个方便的属性参考。 此外,所有实际使用的属性(包括默认值)都可以通过您的应用程序/actuator/configprops.json中的执行器链接进行检查

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM