近日,新浪圖牀開啓了防盜鏈,不少依託於新浪圖牀的網站圖片都無法訪問了,看到了網上很多的方法,結合小東自身經驗,總結一下新浪圖牀
403
(失效)的解決辦法。
新浪圖牀是一個非常好的圖牀,雖然新浪到處被噴,但是在圖片外鏈上一直沒采取防盜鏈措施,近日纔開啓了防盜鏈措施。衆所周知,圖片的加載是需要流量的,但如果服務器的帶寬不夠大,那麼網站的加載速度明顯降低,用戶的體驗就不好,所以不少的小網站站長,會將圖片以外鏈的方式存到新浪圖牀中。
0x01 什麼是防盜鏈
新浪的防盜鏈是Referer 防盜鏈,這種類型的防盜鏈方式,非常常見也很簡單
Referer
在HTTP
協議裏有特殊的用途,當瀏覽器向服務器發送請求時,一般會帶上Referer
頭,告知服務器該請求是從哪個頁面鏈接過來的。Referer
經常被用於頁面訪問統計、圖片防盜鏈等。
當一個HTTP
請求發送到CDN
服務器後,CDN
服務器檢查客戶URL
中所攜帶的Referer
字段的信息,禁止或者允許符合特定規則(支持正則匹配)
常見CDN
服務就會提供此類型的防盜鏈功能,典型特徵是:不能通過其他網站訪問,但是直接訪問圖片資源的URL
是可以下載、查看。
0x02 解決辦法
因爲很多站長目前的圖片都存在新浪的服務器中,結合
Referer
防盜鏈的特徵,小東蒐集總結有如下的解決辦法。
2.1 META標籤
在網站的<head>
標籤內添加一行聲明referrer
的規則
<meta name="referrer" content="same-origin">
<meta name="referrer" content="no-referrer" />
這樣就可以繼續使用新浪圖牀,但是可能會有一些網站基於referrer
規則的功能會異常
2.2 IMG標籤
既然是圖片資源,那麼在
HTML5
中的img
標籤有一個referrerpolicy
的屬性,可以顯示聲明referrer
規則,所以在圖片標籤中加入一個屬性即可
<img src="https://wx4.sinaimg.cn/large/006WvzUFly4g2fbc9ojcbj30j60auq3j.jpg" referrerpolicy="no-referrer">
2.3 未開啓防盜鏈的域名前綴
大家都知道新浪圖片的域名前綴很多,其中有的域名前綴並沒有和諧,所以可嘗試替換域名前綴
ww1
,ww2
,ww3
,tva1
,wx4
的域名前綴並未開啓防盜鏈
如果各位還有什麼未開啓防盜鏈的域名,請評論或留言告知
2.4 Nginx反向代理
反向代理就是一種,代理請求的方式,相當於是,自己的服務器去訪問圖片,然後將圖片轉發給用戶
如果您使用的是寶塔服務器面板,那麼可以如下配置:
同時記得開啓緩存,時間越大越好(避免頻繁請求)
2.5 更換圖牀
這裏小東就不推薦什麼了,小東自建的天雲圖牀其實很不錯,平時一直在維護中,確保資源不出問題。
2.6 圖片本地化
圖片存放在別人的服務器上,總覺得不踏實,那麼就可以將之前存放在新浪服務器上的圖片,下載到自己的服務器上。
如果覺得本地化後網站訪問速度慢,那麼可以購買 CDN
服務,同時網上還有一些免費的 CDN
服務,比如 360
、安全寶
、百度
的免費 CDN
,站長朋友可以嘗試使用,不懂的可以留言評論。
如果是emlog
博客 CMS
的站長,可以下載安裝小東寫的“ 圖片本地化插件 ”,能夠快速下載遠程圖片到服務器,並且替換文章中的遠程圖片,一鍵操作。
下載地址:https://blog.dyboy.cn/develop/88.html
0x03 其他解決方法
小東博客之前部分文章是使用的新浪圖牀的圖片外鏈,我直接選擇更換圖牀,寫了一個 python
腳本,直接將新浪的圖片下載下來,然後上傳到另一個圖牀,並且替換文章內容中的圖片鏈接,也是很方便的,有相關技術的朋友可以弄一弄。如果需要此類幫助的,可以付費聯繫小東。
其他的方法,應該是還有一些,如果各位還有什麼比較好的方式,歡迎留言,互相交流圖牀失效解決辦法的相關技術