Proxy
如何處理來自網際網路的某些特定大文件的重複下載
我們將提供一個應用程序,允許我們的客戶為我工作的城堡下載某種音頻指南。
我真的不希望每個下載應用程序的使用者(通過我們提供的免費 WiFi)都在我們的城堡中,從我們城堡外的應用程序伺服器下載整個音頻文件(它在我們的網路之外)。
所以我的研究結果表明,我需要建構一個代理來記憶體經常使用的文件(在我的例子中是 MP3 數據),這樣我就可以讓我的免費 WiFi 頻寬免費用於“動態”數據。
我需要這樣做
- 控制/限制通過我的網路的負載,因此我不會影響我的辦公室網路。
- 保持免費 WiFi 流暢執行。我們有很多客戶,並提供免費 WiFi。我們的內部網路使用 10GBit,我們的網際網路頻寬約為 1Gbit。
所以使用代理來分發 MP3 文件,而不必一次又一次地從網際網路上下載它們是我正在尋找的。
問題:
- Squid 是我正在尋找的工具還是有更好的工具?
- 如何強制所有免費 WiFi 使用者自動使用代理。
- $$ Optional $$您對此案例的體驗。
可以使用 Squid,但是您應該注意一些問題:
- Squid 還不支持記憶體部分內容,所以如果你的應用程序使用範圍請求而不是下載整個文件,你會遇到一些問題。您可以將 Squid 配置為在範圍請求時獲取記憶體中的整個文件,但在這種情況下,它將阻塞直到整個文件被下載 - 如果記憶體的音頻文件過時並且需要下載新副本,您的應用程序的使用者必須等待伺服器下載整個文件,然後應用才能播放它。
- 您的應用程序應該使用 HTTP 來獲取文件,否則如果您的代理嘗試攔截 HTTPS 連接,您將遇到證書錯誤,除非您為代理創建證書並讓您的應用程序信任它,但除您的應用程序之外的所有其他內容也會拋出 HTTPS 證書錯誤,您對此無能為力,通常攔截 HTTPS 是不好的做法,除非您向使用者明確說明並讓他們安裝證書。
要強制客戶端的流量在沒有任何配置的情況下通過 Squid,您需要將 Squid 配置為透明代理,然後在使用者用於訪問 Internet 的網關上使用一些防火牆魔法將所有 HTTP 流量重定向到您的 Squid 伺服器:
http_port 3128 intercept # enable transparent proxy mode
至於網關配置,它取決於那裡的防火牆,對於 IPtables,假設您的 Squid 伺服器與您的使用者位於同一網關後面,這樣的事情應該可以工作:
iptables -t nat -A PREROUTING -s <squid_server_IP> -p tcp --dport 80 -j ACCEPT # accept HTTP traffic from the Squid iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination <squid_server_IP>:3128 # redirect your user's HTTP traffic to Squid iptables -t nat -A POSTROUTING -j MASQUERADE # probably not needed since your gateway already has this
你應該看看Squid 的文件,他們有一些配置企業防火牆的例子。