2014-07-06 54 views
2

我一直在尋找一段時間,但沒有設法找到任何符合我需要的東西。我不需要盜鏈保護,儘可能避免人們直接訪問我的文件。比方說:Nginx:防止直接訪問靜態文件

我的website.com請求website.com/assets/custom.js,這會工作,但我想訪問者直接訪問此文件得到403 status code什麼的。我真的不知道是否有可能,並且我沒有任何合乎邏輯的步驟。

問候!

+0

顯示你的nginx的配置(部分'服務器{服務器website.com ...}') –

+0

@mr_tron它是非常非常簡單的,默認的配置,這是一個靜態的子域所以它有一個'root'和一個'server_name'! – Eduard

+0

我完全不明白你想要什麼。你有一些沒有動態生成內容的靜態文件(例如:'index.html,main.css和logo.png'),並且只有在打開索引時,人們才能加載文件'main.css'和'logo.png'瀏覽器中的.html文件嘗試獲取'main.css'和'logo.png'? –

回答

7

您可以使用nginx referer模塊:http://nginx.org/en/docs/http/ngx_http_referer_module.html。 事情是這樣的:

server { 
    listen 80; 
    server_name website.com; 
    root /var/www/website.com/html ; 
    location /assets/ { 
     valid_referers website.com/ website.com/index.html website.com/some_other_good_page.html ; 
     if $invalid_referer { 
      deny all; 
     } 
    } 
} 

這個配置後衛assets目錄。但請記住,這並不保證,只適用於瀏覽器 - 任何機構都可以通過curl或telnet模擬有效的請求。爲了確保安全,您需要使用動態生成的頁面和動態生成的鏈接。

+0

我對nginx一無所知,但是您不必在某處定義var $ invalid_referer? –

1

如果您的nginx動力開發實例顯示在Google搜索結果中,則有一種快速而簡單的方法可以防止搜索引擎抓取您的網站。將以下行添加到要阻止抓取的塊的虛擬主機配置文件的位置塊。

add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";