【问题标题】:Rails application resources not getting rendered over httpsRails 应用程序资源未通过 https 呈现
【发布时间】:2020-09-19 12:51:55
【问题描述】:

我正在使用 ruby​​ 2.4.0p0 和 Rails 5.2.3

在 production.rb 文件中我做了如下设置:

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  config.force_ssl = true
  if Rails.application.config.force_ssl
    Rails.application.routes.default_url_options[:protocol] = 'https'
  end

但资源仍然在 http 而不是 https 上呈现,我是否需要做任何额外的事情,请提供所需要做的事情,以使所有资产从 s3 加载通过 https 加载。

该网站位于:https://tukaweb.com/asset/garments s3 资源位于 http 例如:http://tukaweb.s3.amazonaws.com/uploads/three_d_garment/thumbnail/7/Womens_Dress_35-41_Thumbnail.png?X-Amz-Expires=600&X-Amz-Date=20200918T060705Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIRDA3IQIVTEPMN6Q%2F20200918%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=1792bd4cc2437abd950b7d16d360d09e64423bdef89f41c24a5386d35e982dfa 通过 https 需要它们。

【问题讨论】:

    标签: ruby-on-rails amazon-s3 ruby-on-rails-5


    【解决方案1】:

    所需的更改应在 webapp/config/initializers 目录中的 carrierwave.rb 中完成,将设置修改为:

    CarrierWave.configure do |config|
      config.fog_provider = 'fog/aws'
      config.fog_credentials = {
          provider:              'AWS',               
          aws_access_key_id:     'XXXXXXXXXX',        
          aws_secret_access_key: 'xxxxxxxxxx',        
          use_iam_profile:       false,               
          region:                'us-west-2',   #  optional, defaults to 'us-east-1'
          # host:                  'ec2-xx-xxx-xx-xx.us-west-2.compute.amazonaws.com',             # optional, defaults to nil
          :endpoint => 'https://s3.amazonaws.com',
      }
      config.fog_directory  = 'tukaweb'                                      # required
      config.fog_public     = false                                                 # optional, defaults to true
      # config.fog_attributes = { cache_control: "public, max-age=#{365.days.to_i}" } # optional, defaults to {}
    end
    

    负责将 s3 资源更改为从 https 下载而不是 http 的行

      :endpoint => 'https://s3.amazonaws.com'  ## earlier it was 'http://s3.amazonaws.com' 
    

    【讨论】:

      【解决方案2】:

      强制 SSL 仅适用于对铁路路线的传入请求。如果您将图片链接设置为http://image-domain.com/image,它将使用http,您将收到混合内容警告。您需要确保应用程序路由之外的任何内容也将使用 SSL 或安全连接。

      当我看到混合内容警告时,我要做的第一件事是对代码库进行全局搜索以查找 http:// 以查找未使用 https:// 的所有位置。根据我看到的情况,我可能会也可能不会进行全局查找 + 替换,在某些情况下它需要是 http:// 或者它不能正常工作(如果网站没有 https:// 版本)。

      接下来要找出导致不安全 url 的原因,这里是 S3,所以我会查看使用 S3 的内容,并找出如何告诉它使用 SSL 或安全连接。

      注意:另一个答案很好地解释了您的实际问题是什么,但这对于其他人对混合内容问题的一般故障排除可能更有用,并且会导致相同的结果。

      【讨论】:

        猜你喜欢
        • 2014-09-06
        • 2014-12-05
        • 2015-07-17
        • 1970-01-01
        • 2018-08-20
        • 2015-05-27
        • 1970-01-01
        • 2012-11-09
        • 1970-01-01
        相关资源
        最近更新 更多