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
相关产品推荐
相关产品推荐

