我正在使用L7 HTTP负载均衡器。我想从HTTP请求重定向到HTTPS。这是我的nginx配置的一部分。它在我没有Load Balancer的情况下访问我的Web服务器时有效。但它不适用于Load Balancer。返回404错误。
我该如何解决?
我正在使用nginx
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
...
}
HTTP响应
HTTP/1.1 404 Not Found
Server: Google Frontend
我在下面发现了这个问题,并添加了$ http_x_forwarded_proto检查。但结果没有改变。
问题255:使用HTTP(S)负载均衡器时,将所有HTTP流量重定向到HTTPS https://code.google.com/p/google-compute-engine/issues/detail?id=255&thanks=255&ts=1446612833
server {
listen 80;
server_name example.com;
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
...
}
更新1
我发现我的负载均衡器只有HTTPS协议端点配置。我想我需要HTTP端口端点设置。
以下这篇文章会有所帮助。
答案 0 :(得分:1)
由于负载均衡器仅在443上发送流量,因此从不使用80的服务器块。换句话说:负载均衡器的所有传入连接,在端口80和443上,并且在后端仅通过443发送,即使它们不是HTTPS连接。
解决方案是重定向到HTTPS,同时在整个后端保持SSL安全性。在负载均衡器的前端,打开端口80和443,在后端通过HTTPS发送它。然后将X_Forwarded_Proto条件放入SSL服务器块中。
server {
listen 443 ssl;
...
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
...
}
编辑:同样检查一下。 Google正在跟踪此功能请求。 https://issuetracker.google.com/issues/35904733