我尝试使用 rack-cors gem,但我花了一段时间才注意到虽然使用 Heroku 的 Rails 12 Factor Gem Phusion Passenger 5.0.10 (Nginx) 正在为资产服务。
仅供将来参考,基于@user664833's solution,这是我运行在 Heroku 上托管的 Rails 4.2 应用程序的设置,其中 Phusion Passenger 作为服务器,Amazon Cloudfront 作为 CDN,使用 cdn.my-domain.com 作为 CNAME仅分发和限制GET 和HEAD 对my-domain.com 子域的请求:
# config/nginx.conf.erb
location @static_asset {
gzip_static on;
expires max;
add_header Cache-Control public;
add_header ETag "";
# added configuration for CORS for font assets
if ($http_origin ~* ((https?:\/\/[^\/]*\.my-domain\.com(:[0-9]+)?)) {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true'; # only needed for SSL
add_header 'Access-Control-Allow-Methods' 'GET, HEAD';
add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With';
}
# end of added configuration
}
我编辑了缓存行为以将 Origin 标头列入白名单。
并将 Origin 设置(Origin 选项卡)更改为 Match viewer(如果您想使用 SSL)。
最后,在 Invalidations 选项卡中创建一个失效(如果是新配置则无需这样做),使用/* 清除所有内容。
希望这会为某人节省时间。