我的问题:
1)当使用https发出浏览器的原始请求时,为什么在位置标题中使用http作为方案?
2)这是一个Wildfly负载平衡器问题吗?
我的请求标头是:
method: POST
scheme: https
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
content-length: 39
content-type: application/x-www-form-urlencoded
origin: https://10.43.201.207
referer: https://10.43.201.207/myapp/login.html
我的响应标题为:
content-length: 0
date: Thu, 03 Jan 2019 04:55:42 GMT
location: http://10.43.201.207/myapp/dashboard.html?init=1
server: WildFly/12
set-cookie: APP_AUTH=leTPWYd1222zsrrtRRtgpuEWEWc7pR0CBuNPYPT5QHbGn_Db7ICK; path=/; secure; HttpOnly
set-cookie: JSESSIONID="leTee33333PWYdSDSDweetRRtgpuc7pR0CBuNPYPT5QHbGn_Db7ICK.master-0:master-server"; Version=1; Path=/myapp; Secure; HttpOnly
status: 302
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-powered-by: Undertow/1
x-xss-protection: 1; mode=block
答案 0 :(得分:1)
负载均衡器是否正在剥离TLS,并将请求作为HTTP转发到应用程序?如果是这样,则该应用在执行重定向时可能使用与接收请求相同的协议。
在这种情况下,要么让应用强制https
,要么让负载平衡器重写返回的响应。
您可能需要设置proxy-address-forwarding="true"
和/或request_header_add X-Forwarded-Proto https
。
答案 1 :(得分:0)
以下是上述问题的详细解决方案说明:
我们有一个负载均衡器,位于两个Wildfly服务器的前面。负载平衡器处理SSL握手并强制所有流量通过https
进行访问,wildfly节点上没有证书,并且负载均衡器和服务器之间的流量未加密,wildfly节点对SSL一无所知。负载均衡器和wildfly节点是通过http
协议进行的。
当用户访问受保护的页面时,例如https://someip/app
请求流程如下:
https
来负载均衡器http
协议将负载均衡器加载到Wildlfy节点。proxy-address-forwarding="true"
中添加了http
听众答案 2 :(得分:0)
另一种选择是让负载均衡器将Strict-Transport-Security标头添加到服务器响应中,例如:
Strict-Transport-Security max-age=300;
这将有效地告诉客户端,他应该始终使用https与您的服务器联系。