ruby-on-rails - 使用 rails 和 elastic beanstalk 从 http 转发到 https 时如何防止重定向循环?

标签 ruby-on-rails amazon-web-services ssl nginx

我刚刚在我的 Rails 应用程序中安装了一个 ssl 证书,我现在正在尝试将所有 http 流量重定向到 https。它托管在 AWS Elastic Beanstalk 上。我已按照说明调整 nginx 配置以服务 ssl。问题是它仍然允许 http 流量。我发现的每个解决方案要么完全失败,要么导致重定向循环。 (向端口 80 的配置添加一个新的服务器 block 以处理重定向;添加 if 指令以在协议(protocol)类型为 http 时重定向;等等)

下面是来自 .ebextensions 的额外 nginx 配置文件:

files:
  /etc/nginx/conf.d/https.conf:
    content: |
      # HTTPS server

      server {
          listen       443;
          server_name  localhost;

          ssl                  on;
          ssl_certificate      /etc/pki/tls/certs/server.crt;
          ssl_certificate_key  /etc/pki/tls/certs/server.key;

          ssl_session_timeout  5m;

          ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
          ssl_prefer_server_ciphers   on;

          location / {
              proxy_pass  http://my_app.com;
              proxy_set_header        Host            $host;
              proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header        X-Forwarded-Proto https;
          }

          location /assets {
            alias /var/app/current/public/assets;
            gzip_static on;
            gzip on;
            expires max;
            add_header Cache-Control public;
          }

          location /public {
            alias /var/app/current/public;
            gzip_static on;
            gzip on;
            expires max;
            add_header Cache-Control public;
          }
      }

  /etc/pki/tls/certs/server.crt:
    content: |
      -----BEGIN CERTIFICATE----- 
      xxxxxxxxxxxxxxxxxxxxxxxxx
      REDACTED CERTIFICATE HERE
      xxxxxxxxxxxxxxxxxxxxxxxxx
      -----END CERTIFICATE----- 

container_commands:
  01restart_nginx:
    command: "service nginx restart"

此配置有效,但我需要一个重定向策略。我怀疑配置代理到 http://my_app.com 是事实这会导致循环,但我不知道将它发送到哪里让 Rails 接收请求。我究竟做错了什么?如何在不创建循环的情况下将所有 http 流量重定向到 https?顺便说一句,我绝对不想涉及负载均衡器。

感谢任何帮助。

最佳答案

所以答案比我想象的要简单。我仍然不确定如何防止重定向循环,但我可以使用 Rails 设置:

config.force_ssl = true

完成我想做的事情并将所有 http 流量路由到使用 https。

关于ruby-on-rails - 使用 rails 和 elastic beanstalk 从 http 转发到 https 时如何防止重定向循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58514065/

相关文章:

amazon-web-services - 如何使用 SSL 强制执行与 Aurora RDS 集群的加密连接

ssl - haproxy - 如何进行虚拟主机和 https 转发?

android - 在 HttpsURLConnection 中禁用 SSL 作为协议(protocol)

ruby-on-rails - 如何创建 ActiveRecord::RecordInvalid 进行测试?

ruby-on-rails - 使用 angular2-token 包成功登录后,rails 4 API 给出 ​​401 未经授权的响应

ruby-on-rails - has_secure_password、RSpec 和用户创建

python - 带有 boto3 的 AWS S3 预签名 url - 签名不匹配

r - 如何在 EC2 上运行 R 版本 > 3 或更新 Debian

ruby-on-rails - 在 Rails 开发中使用 solr 和 sunspot

php - 使用 AWS PHP SDK 将图像保存到 S3