Maz*_*mar 7 java apache tomcat spring-boot kubernetes
我最近将我的Spring应用程序迁移到了Spring Boot(带有嵌入式Tomcat),我现在正将它移植到Kubernetes中.作为迁移到Kubernetes的一部分,我将Apache配置分离为自己的服务并在Kubernetes中部署,以充当我的Spring Boot应用程序的代理.
我当前的设置是带有LoadBalancer服务的Apache,它接受来自世界各地的请求.这会接受这些请求并将它们转发到我的Spring Boot应用程序,该应用程序具有ClusterIP服务.
同样重要的是要注意:我的Apache将所有http重定向到https.
每当我的Spring Boot应用程序返回重定向到客户端时,响应中的位置标头是http而不是https(只有通过https发出的请求才能通过Apache代理到我的应用程序).
示例:
未登录的用户转到:
https://example.com/admin
Run Code Online (Sandbox Code Playgroud)
如果未经过身份验证,管理页面会将用户重定向到登录页面.这应该是一个重定向到:
https://example.com/login
Run Code Online (Sandbox Code Playgroud)
但是,我的应用程序将用户重定向到:
http://example.com/login
Run Code Online (Sandbox Code Playgroud)
然后Apache再次将用户重定向到:
https://example.com/login
Run Code Online (Sandbox Code Playgroud)
我检查了我的日志,以确保我的应用程序接收请求包括X-Forwarded-Proto: https
报头,这从我的理解应该在重定向响应HTTPS的位置标头.
正如几篇Stack Overflow帖子中所提到的,我尝试添加server.use-forward-headers=true
到我的application.properties
文件中,但这没有做任何事情.我也尝试添加server.tomcat.protocol-header=X-Forwarded-Proto
它,但这没有做任何事情(从我读到的,无论如何是默认).
networkCIDR
包含在Tomcat的内部代理列表中RemoteIPValve
X-Forwarded-For
似乎也没有影响,所以我认为问题在于所有前向标题我想到了。我的错误是假设那networkCIDR
是IP所返回的IP地址request.getRemoteAddr()
,而实际上是我的k8s内部集群IP。鉴于请求来自Apache,而Apache也位于集群中,因此这是有道理的。内部群集IP RemoteIPValve
不在内部代理列表中,因此未使用转发头。
通过使用在AND我的内部集群IP中指定的默认值将server.tomcat.internal-proxies
属性添加到my中,一切都会按预期进行。application.properties
RemoteIpValve
归档时间: |
|
查看次数: |
4361 次 |
最近记录: |