我使用自动缩放组创建了一个负载均衡器。在我应用SSL证书并将流量重定向到HTTPS之前,它工作得非常好。负载均衡器运行状况检查是http 1,我无法将该检查移动到https,因为证书已应用于负载均衡器。所以当前的堆栈是Rails 4.2,操作系统是ubuntu,http entertainer是nginx,我有5个实例在Load Balancer上运行。所以我在nginx上创建了一个重定向,如下所示
if ($scheme = http) {
return 301 mydomain.com$request_uri;
}
然后我尝试了这个
if ($request_uri != "/public/health.html" ) {
set $balancer P;
}
if ($scheme = http) {
set $balancer "${balancer}C";
}
if ($balancer = PC) {
return 303 mydomain.com$request_uri;
}
通过这些重定向,我的网站崩溃了,在浏览器上我遇到了多次重定向的错误。这个问题让我发疯了。请帮忙。非常感谢您的帮助。感谢
答案 0 :(得分:3)
我的tomcat服务器(实例)和apachae服务器(负载均衡器)遇到了完全相同的问题。我也在浏览器中获得了多个重定向。我做了两件事:
LoadModule reqtimeout_module modules / mod_reqtimeout.so
LoadModule ssl_module modules / mod_ssl.so
听443
<VirtualHost *:80>
<Proxy *>
Order deny,allow
Allow from all
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
Rewriterule ^(.*)$ https://www.example.com/ [L,R=301]
</Proxy>
RequestReadTimeout header=35 body=35
ProxyPass / http://localhost:8080/ retry=0
ProxyPassReverse / http://localhost:8080/
ProxyPreserveHost on
ErrorLog /var/log/httpd/elasticbeanstalk-error_log
</VirtualHost>
<VirtualHost *:443>
RequestReadTimeout header=35 body=35
ProxyPass / http://localhost:8080/ retry=0
ProxyPassReverse / http://localhost:8080/
ProxyPreserveHost on
SSLEngine on
SSLCertificateFile /path/where/cert/stored/2_example.com.crt
SSLCertificateKeyFile /path/where/cert/stored/private-key.pem
SSLCertificateChainFile /path/where/cert/stored/1_root_bundle.crt
ErrorLog /var/log/httpd/elasticbeanstalk-error_log
</VirtualHost>
我保持端口80打开进行健康检查,443打开网站。此配置可能对您有所帮助。如果你能解决问题,请告诉我。
答案 1 :(得分:0)
你的nginx配置中的这样的东西应该可以工作:
server {
listen 80;
server_name www.example.com;
location = /public/health.html {
return 200;
}
location / {
return 301 https://$http_host$request_uri;
}
}
答案 2 :(得分:0)
非常简短有效的解决方案,可在任何AWS设置上100%运行。把它放在应用程序控制器中。
before_filter :move_to_https if RAILS.env == "production"
def move_to_https
redirect_to request.url.gsub("http","https") unless request.url.include?("https")
end
这会将任何域流量转换为https,而ip将永远不会通过负载均衡器公开。