You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails:如何让Active Storage返回HTTP而非HTTPS的资源URL?

解决Rails生产环境Active Storage返回HTTPS URL的问题

以下是几个可行的解决办法:

  • 配置Active Storage专属的默认URL选项
    在config/environments/production.rb中添加Active Storage自己的默认URL配置,覆盖全局设置:

    config.active_storage.default_url_options = { protocol: :http, host: "你的EC2公网IP" }
    

    注意:Active Storage生成URL时优先使用自身的default_url_options,之前你只配置了控制器的,可能没生效到Active Storage上。

  • 修改storage.yml中的服务URL模板
    打开config/storage.yml,针对生产环境的存储服务(比如Disk或S3),直接指定HTTP格式的URL模板:
    以Disk服务为例:

    production:
      service: Disk
      root: <%= Rails.root.join("storage") %>
      url: "http://你的EC2公网IP/rails/active_storage/blobs/:signed_id/:filename"
    

    如果用S3兼容存储,可添加url或endpoint参数指定HTTP协议:

    production:
      service: S3
      access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
      secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
      bucket: <%= ENV['AWS_BUCKET'] %>
      region: <%= ENV['AWS_REGION'] %>
      url: "http://你的EC2公网IP/rails/active_storage/blobs/:signed_id/:filename"
      # 或者针对S3配置endpoint为HTTP地址
      endpoint: "http://your-s3-endpoint"
    
  • 检查服务器反向代理的重定向规则
    如果你的EC2上用了Nginx/Apache这类反向代理,检查是否配置了强制HTTPS的重定向规则。比如Nginx中如果有类似下面的代码,需要注释或删除:

    # 注释掉这条强制HTTPS的规则
    # return 301 https://$host$request_uri;
    

    服务器层面的重定向会覆盖Rails生成的HTTP URL,导致访问时被转成HTTPS。

  • 手动生成URL时指定协议
    在代码中生成Active Storage URL时,直接传入protocol参数强制使用HTTP:

    # 比如在控制器或模型中
    @user.avatar.url(protocol: :http)
    

内容的提问来源于stack exchange,提问作者lazy_coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:42:34