如何配置使og:image在Facebook分享场景中正常显示?
解决S3桶适配Facebook分享的Referrer策略配置问题
我踩过类似的坑,给你梳理下怎么搞定这个Facebook分享S3图片的问题:
1. 调整S3 Bucket的Referer策略,覆盖Facebook的请求场景
Facebook的图片代理(比如你提到的external-mia3-1.xx.fbcdn.net)在拉取S3图片时,请求的Referer要么是自家的fbcdn域名,要么干脆不带Referer头。你之前的白名单没覆盖这些情况,所以会被拦截。
直接用下面的Bucket Policy替换你现有的(如果之前删了就重新添加),把Facebook相关的域名和空Referer都加进去:
{ "Version": "2012-10-17", "Id": "PolicyForFacebookImageSharing", "Statement": [ { "Sid": "AllowFacebookReferrers", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::common-resources-idance-net/*", "Condition": { "StringLike": { "aws:Referer": [ "https://*.facebook.com/*", "https://*.fbcdn.net/*", "" ] } } } ] }
解释下:
*.facebook.com/*:覆盖Facebook主站的分享请求*.fbcdn.net/*:覆盖Facebook图片代理的请求"":允许不带Referer的请求(Facebook爬虫有时候会这么发)
2. 处理缓存问题(这很可能是你删策略后仍无效的原因)
不管是S3的策略缓存,还是Facebook的图片缓存,都会导致你修改了策略但看不到效果:
- S3/CDN缓存:如果你的S3桶挂了CloudFront或其他CDN,先清一下CDN的缓存;如果没挂CDN,等个5-10分钟让S3策略完全生效。
- Facebook缓存:Facebook会缓存拉取到的图片,哪怕你S3策略改好了,它还是会用旧的缓存。直接用Facebook官方的分享调试工具,输入你的分享链接,点击「重新抓取」强制刷新缓存。
3. 验证策略是否生效
用curl模拟Facebook的请求,测试能不能正常拿到图片:
- 模拟带fbcdn Referer的请求:
curl -I "https://common-resources-idance-net.s3.amazonaws.com/images/model_resources/dance_genres/full/18.jpg" -H "Referer: https://external-mia3-1.xx.fbcdn.net" - 模拟不带Referer的请求:
curl -I "https://common-resources-idance-net.s3.amazonaws.com/images/model_resources/dance_genres/full/18.jpg" -H "Referer:"
如果返回200 OK,说明策略生效了,再去Facebook测试分享就行。
内容的提问来源于stack exchange,提问作者pixelearth
相关产品推荐
相关产品推荐

