背景:用户报障,在华为原生浏览器访问帖子页,图片会被防盗链拦截。而在其他浏览器不会有这个问题。
防盗链的设置跟referer相关。一开始想的是通过手机连接fiddler代理,观察图片请求带的referer是什么。但因为触屏版用了https,而同事手上能重现此问题的华为手机又死活安装不上fiddler的证书,所以没法通过fiddler来捕捉请求。
因为访问图片要先经过Nginx,所以想着在Nginx上打印出其中一张图片的访问请求,查看其referer。但因为访问量有点大,不适合打出所有访问日志。
解决方法:
0、自定义一个访问日志格式;
1、通过Nginx的map,创建一个变量$loggable。该变量默认值为0,只有$request为特定的请求时,其值才为1;
2、在server中配置access_log的时候,带上if=$loggable条件。
例:只打印出/p/12345.jpg的请求,具体配置如下:
0、自定义日志格式:
log_format mylogformat '"$remote_addr" "[$time_local]" "$request_method" '
'"$uri" "$request_uri" "$request_time" "$status" "$body_bytes_sent"'
'"$http_referer" "$http_x_forwarded_for