2017-08-07 73 views
0

我有一臺2臺服務器。第一臺服務器有php和mysql,但第二臺服務器只有php(是下載主機)。 我的網站是關於銷售視頻,並且由於第一臺服務器受到限制(每月流量和空間),因此我需要在第二臺服務器上上傳視頻。所有視頻都必須有動態鏈接,並且所有鏈接必須是一次性的。在另一臺服務器上驗證用戶,然後訪問下載文件

實施例:

  1. 用戶1購買視頻abc,該用戶具有低於鏈接下載:http://example.com/1enewk3hd(指 http://example.com/files/video_abc.mp4

  2. 用戶2買視頻abc,該用戶具有低於鏈路下載:http://example.com/sddfse445(指 http://example.com/files/video_abc.mp4

  3. 用戶必須不能被真正的鏈接來下載視頻http://example.com/files/video_abc.mp4

我的問題

  1. 通過PHP和htaccess的是能夠2服務器上的這種情況下(沒有MySQL的)?

  2. 如果是的話,請指導我什麼是對 第二服務器上進行驗證用戶的最佳方式,然後訪問下載文件(沒有MySQL的)

  3. 在一些網站上,當用戶登錄服務器1上,可以下載從 服務器2.如果從服務器1註銷,則無法訪問服務器2. 這是怎麼回事?我們不能使用服務器2上的服務器1的會話!

+0

是的,有一種令人難以置信的數量不同的方式可以在不需要數據庫的情況下對某人進行身份驗證。但是,如果您知道並確信您的唯一解決方案涉及MySQL,爲什麼您不允許server2聯繫server1上的數據庫? – IsThisJavascript

+0

@ WillParky93感謝親愛的,但如何將服務器2連接到數據庫服務器1?不是很慢? – mghhgm

+0

它會比本地連接慢,但足夠快以至於看不到差異。請聯繫server1主機並要求他們添加一條規則,以允許數據庫接受來自服務器2的連接。您可以將任何本地IP列入白名單,以便在mysql中進行連接。 – IsThisJavascript

回答

1

讓第一臺服務器進行認證。 在第一臺服務器上創建鏈接,這些鏈接有效時間爲x分鐘。保護該鏈接以使用散列進行操作。

哈希= SHA256(validuntil +共享密鑰在兩臺服務器上)

樣品: https://server2/video_abc.mp4?validuntil=2017-08-07_160000&hash=ABC123EF5244

(我的樣品中我也會使用mod_rewrite爲一個不錯的URL)

現在客戶端重定向到生成鏈接的新服務器。 php腳本通過使用共享密鑰驗證查詢參數「validuntil」和「hash」。然後檢查validuntil是否過期。

如果不是流式傳輸文件。不要將流媒體文件放入webroot中。 如果您可以使用x-sendfile header,那麼它們通過腳本readfile或您的網絡服務器發送。

+0

謝謝親愛的,但鏈接必須是一次性的。這個怎麼做? – mghhgm

+0

在某些站點上,當用戶在服務器1上登錄時,可以從服務器2下載。如果從服務器1註銷,則無法訪問服務器2.這是怎麼回事? – mghhgm

+1

鏈接僅適用於5分鐘(或您設置的任何超時)。如果需要的話,包括遠程IP來限制鏈接甚至更多。當你有一個非常大的集羣時,如果一個會話有效,你將被請求充斥。這是一個離線解決方案。是的,一個鏈接不能立即禁用,但誰在乎5分鐘?想想你需要做更多的努力以及有什麼好處。關於即時禁用登錄:您想如何取消已經運行的下載。 –

相關問題