本來覺得是個挺簡單的事情,仔細看了下還是有一些細節需要注意的。網上基本都是僅nginx環境下的配置,這裏給一個用Nginx+Tomcat結構的配置及其簡要說明,主要有以下兩個步驟,選任意一個方案即可。
1. Nginx防盜鏈的配置
a. 方法一:增加ngx_http_accesskey_module模塊,但是需要相應的配置,網上相關資料很多,不贅述。
■ 優點:控制的邏輯嚴密,非常可靠地解決方案。
■ 缺點:需要做較多的修改。
b. 方法二:直接增加Refer的判斷,對於不符合設定的請求予以禁止。這裏有個地方需要注意,後端有Tomcat,所以還要加上proxy pass的相關配置。
# 防止圖片盜鏈,只判斷refer是否爲本站 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { valid_referers none blocked *.taoximao.com taoximao.com; if ($invalid_referer) { return 403; } # 要加上後端訪問的地址 proxy_redirect off; proxy_pass http://web_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
■ 優點:配置相當簡單,也不用安裝其他模塊。
■ 缺點:無法防止別人僞造Refer信息,也就是說人家真的想去偷竊,稍微麻煩點還是阻止不了;另外還發現如果refer爲空還是能正常訪問到,控制放的很寬。
2. Tomcat禁止直接訪問的配置
(注:如果Tomcat還能直接訪問,其實Nginx的那個防盜鏈就沒意義了,加個端口就跳過配置了)
a. 方法一:在Linux下配置iptables,將8080的端口禁止外網訪問即可,這樣就只能通過Nginx來訪問。網上很多資料,不贅述。
■ 優點:直接系統級別配置,與應用本身無關,高度可靠。
■ 缺點:額外配置,配置起來也有點麻煩。
b. 方法二:直接配置Tomcat允許的訪問IP,精確到每個Host。只要修改tomcat下的conf/server.xml文件,在Host之間加上允許的訪問IP即可,直接訪問會返回403錯誤。
<Host name="test1.taoximao.com" appBase="webapps_test1" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1" deny=""/> </Host>
■ 優點:配置簡單,實現的效果也能滿足需要。
■ 缺點:有時候會出現圖片不顯示。