意外的 squid 行為(openSUSE 更新記憶體)
由於沒有以前的經驗,我剛剛設置了一個
squid
代理。其唯一目的是防止所有 Linux 系統 (openSUSE) 從 Internet 下載其更新。可以為 openSUSE 更新工具輕鬆配置代理。
tcpdump
顯示其他系統訪問代理,代理訪問儲存庫。我不明白的是:在發行版升級後,第一次線上更新應該是 400 MiB 到 700 MiB(這是 YaST 在開始更新之前所說的)。但
squid
儲存目錄僅包含大約 80 MiB 數據。這些
access.log
節目既成功又失敗。即使由於某些奇怪的原因,Linux 系統會訪問不同的伺服器(是否存在某種 DNS 不透明重定向?),但我希望代理儲存至少與最大下載量一樣大。儲存庫
http
不是,https
因此代理不應該有問題。發現問題
此答案中的此連結提供了為什麼 squid 在此處無法正常工作的資訊:
包是使用分散在多個鏡像上的分段下載來下載的,這使得 squid 無法進行大量記憶體。
我找到了本教程:如何使用 Squid 記憶體 openSUSE 儲存庫。
摘抄
如何使您的本地 Squid Web 記憶體與 openSUSE 儲存庫和 openSUSE 網路安裝過程一起使用。實際上,如何執行完全自主的本地按需儲存庫鏡像。即使使用高速 ADSL 網際網路連接,也可以輕鬆實現高達 60% 的節省。
以下是該文章的分步詳細資訊。
一步步
- 烏賊
Squid web-proxy 是這個設置中的關鍵元素,所以一個工作的 Squid 安裝是先決條件。設置 Squid 並不像看起來那麼複雜,但是您必須查閱 squid 文件,這超出了本文的範圍。您是否喜歡使用環境變數 http_proxy 等直接訪問,或者如果您執行透明代理(就像我一樣),並不重要。
**注意:**這裡的設置適用於 Squid 2.7,我認為 storeurl_rewrite 功能尚未在 Squid 3.x 中實現。 2. 傑瑞德
jesred 是 URL 重寫器。它相當成熟,但功能齊全。(原始網頁)。我必須進行一些更改以使其與squid 2.7完全兼容:
- jesred-1.3.tar.gz目前,它沒有打包,您必須從頭開始建構它:
tar xzvf <tarball> cd jesred-1.3 make
安裝:完成後,將二進制 jesred 複製到
/usr/local/bin
您自己的二進製文件的首選位置。jesred 的配置文件:
/etc/squid/jesred.conf
allow = /etc/squid/redirector.acl rules = /etc/squid/opensuse-redirect.rules redirect_log = /var/log/squid/redirect.log rewrite_log = /var/log/squid/rewrite.log
使用
/etc/squid/redirector.acl
您可以控制重寫器應該處理哪些客戶端的請求,但我發現使用 Squid 的 ACL 和 storeurl_access 指令實際上更容易控制,所以我為所有客戶端啟用:# rewrite all URLs from 0.0.0.0/0
- /etc/squid/squid.conf
配置:將以下行添加到
/etc/squid/squid.conf
storeurl_rewrite_program /usr/bin/jesred storeurl_rewrite_children 5acl metalink req_mime_type application/metalink4+xml storeurl_access deny metalink storeurl_access allow localnet storeurl_access allow localhost acl localhost src 127.0.0.0/8 acl localnet src 192.168.0.0/16
- fetcher206 日誌文件
修改
/etc/squid/squid./conf
如下:logformat f206 %{%Y-%m-%dT%H:%M:%S}tl %Ss/%03Hs %rm %ru %mt access_log /var/log/squid/fetch206.log f206
fetcher206 將讀取此日誌。
為防止它變得太大,請將以下內容添加到
/etc/logrotate.d/
:/var/log/squid/fetch206.log { compress dateext maxage 365 rotate 5 size=+4M notifempty missingok create 640 squid root sharedscripts postrotate /etc/init.d/squid reload endscript }
- 魷魚延遲池
這是一個可選步驟 - 根據您可用的下游頻寬,您可能希望限制 fetcher206 用於檢索儲存庫文件的內容。這可以防止
- 減慢目前的安裝速度和
- 濫用網際網路連接
delay_pools 1 delay_class 1 1 delay_access 1 allow localhost delay_parameters 1 1000000/1000000
將上述內容添加到 /etc/squid/squid.conf - 它定義了一個 delay_pool,只能從 localhost(這是 fetcher206 將執行 wget 的地方)訪問,最大頻寬為 1MByte/sec。
如果您有其他來自 localhost 的 http/proxy 流量,您可以添加另一個 127.0.0.x 地址,並將其專門用於 fetcher206。 6. 鏡像數據庫
我們需要一個可用的 openSUSE 鏡像的目前列表。這可以從 mirrors.opensuse.org 中檢索。目前,我使用 XSL 來解析 HTML 頁面,但我希望直接從 MirrorBrain 轉移到一個適當格式的列表。
mkdir -p /var/lib/fetcher206 cp tarball/Makefile.mirrors /var/lib/fetcher206/Makefile cp tarball/extract* /var/lib/fetcher206/ make -C /var/lib/fetcher206 cp tarball/opensuse_mirrors.cron /etc/cron.d/opensuse_mirrors
- 重新載入魷魚
當你走到這一步時,是時候重新載入魷魚了
squid -k reconfigure
- 抓取器206
fetcher206 目前是一個 PHP 腳本。只需將其複製到 /usr/bin 即可安裝它。它有一些硬編碼選項,例如同時執行的 wget 數量、日誌文件的名稱等。
fetcher206 還沒有 systemd 服務單元,也沒有 LSB 初始化腳本。目前,您只需從以下內容開始:
startproc -s -q /usr/bin/fetcher206
參考