繁体   English   中英

应用AWS SSL证书后的Load Balancer运行状况检查

[英]Load Balancer Health Check After Applying AWS SSL certificates

我用自动缩放组创建了一个负载均衡器。 在我应用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;
}

随着这些重定向我的网站下降,在浏览器上我有多个重定向错误。 这个问题让我发疯了。 请帮忙。 非常感谢您的帮助。 谢谢

我的tomcat服务器(实例)和apachae服务器(负载均衡器)遇到了完全相同的问题。 我也在浏览器中获得了多个重定向。 我做了两件事:

  1. 更改了负载均衡器侦听器: http重定向到http和https重定向到https
  2. 在apache配置中改了一点:

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号站点。 此配置可能对您有所帮助。 如果你能解决问题,请告诉我。

你的nginx配置中的这样的东西应该工作:

server {
        listen 80;
        server_name www.example.com;


        location = /public/health.html {
           return 200;
        }

        location / {
            return 301 https://$http_host$request_uri;
        }
    }

非常简短有效的解决方案,可在任何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将永远不会通过负载均衡器公开。

暂无
暂无

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

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