Q:Nginx中防盜鏈鏈接到的圖片,被循環調用失敗!
設置兩個web虛擬機web1和web2,web1有一個圖片img.html,web2的圖片img.html中的圖片是盜用web1的,現在web1設置防盜鏈接,成功阻止web2盜用圖片,但是在將web2的盜用訪問轉到主頁html下的2.jpg時,產生循環調用2.jpg且訪問失敗!
Request URL: http://web2.devops.com/img.html //img.html顯示
Request Method: GET
Status Code: 200 OK
Remote Address: 192.168.226.128:80
Referrer Policy: no-referrer-when-downgrade
Request URL: http://web1.devops.com/1.jpg //1.jpg顯示
Request Method: GET
Status Code: 302 Moved Temporarily
Remote Address: 192.168.226.128:80
Referrer Policy: no-referrer-when-downgrade
Request URL: http://192.168.226.128/2.jpg //2.jpg顯示
Request Method: GET
Status Code: 302 Moved Temporarily
Remote Address: 192.168.226.128:80
Referrer Policy: no-referrer-when-downgrade
A:
1.檢查圖片以及幾個img.html位置
[root@min1 html]# ls
2.jpg index.html ip web1
50x.html.bak index.html.bak port web2
[root@min1 web1]# pwd
/usr/local/nginx/html/web1
[root@min1 web1]# ls
1.jpg img.html index.html
[root@min1 web2]# pwd
/usr/local/nginx/html/web2
[root@min1 web2]# ls
img.html index.html
沒有問題!
2.檢查配置文件
34 server {
35 listen 80;
36 server_name web1.devops.com;
37 root html/web1;
38
39 location ~ \.(jpg|jpeg|png)$ {
40 valid_referers web1.devops.com;
41 if ($invalid_referer) {
42 #return 404;
43 rewrite ^/ http://192.168.226.128/2.jpg break;
44 }
45 }
46 }
47 server {
48 listen 80;
49 server_name web2.devops.com;
50 root html/web2;
51 }
web1與web2配置正常。
3.若將rewrite註釋掉,return 打開,可以成功在Google瀏覽器成功返回404。所以防盜鏈功能成功生效。
4. 打開rewrite,使用谷歌瀏覽器測試網頁->(右鍵)檢查->network->刷新網頁->查看頁面調用方式,發現2.jpg確實被調用,調用語句沒有問題。
5. 檢查rewrite和2.jpg是否在web1中,若在web1中可能會被循環調用。
6. 檢查主頁192.168.226.128是否可以直接訪問?
http://192.168.226.128
顯示
hello,this is the web1 //顯示正常!
訪問網址http://192.168.226.128/2.jpg 失敗!
懷疑圖片鏈接有問題!
7.經檢查測試得知,是rewrite ^/ http://192.168.226.128/2.jpg break; 可知是這一句出了問題!
因爲用IP定向,若http中的server沒有一個專門指向此IP的,那麼會自動將IP匹配到第一個server,所以出現了循環調用的現象!
解決方案 :
①將web1與web2的server虛擬機放到localhost後面去,讓系統自動匹配到localhost的server中。
②爲訪問的IP單獨建立一個虛擬機。