Proxy
配置 apt 以在 vagrant box 中使用代理
我正在使用 Vagrant 設置虛擬機進行測試。我希望在虛擬機內部使用主機上的代理,以允許記憶體所有下載以在正在執行的虛擬機實例之間持續存在,這不僅是為了提高速度,而且還允許我在有時啟動 vagrant 實例沒有網路連接。
我已經設置了正在執行的代理,我想我已經通過在 Vagrant 腳本中設置它來告訴 apt 使用它:
config.vm.provision :shell, :inline => 'echo \'Acquire { Retries "0"; HTTP { Proxy "http://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf' config.vm.provision :shell, :inline => 'echo \'Acquire { Retries "0"; FTP { Proxy "ftp://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf' config.vm.provision :shell, :inline => 'echo \'Acquire { Retries "0"; HTTPS { Proxy "https://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf'
它正在部分工作,即當我的 wifi 連接被禁用但 Squid 正在執行並且在它的記憶體中有一些條目時,對源的初始請求會命中記憶體並工作。我還可以從 Squids 日誌文件中看到一些命中 Squid 的請求:
1367492453.816 34 127.0.0.1 TCP_REFRESH_MODIFIED/200 592 GET http://security.ubuntu.com/ubuntu/dists/precise-security/Release.gpg - DIRECT/91.189.92.181 - 1367492453.987 168 127.0.0.1 TCP_REFRESH_MODIFIED/200 49973 GET http://security.ubuntu.com/ubuntu/dists/precise-security/Release - DIRECT/91.189.92.181 - 1367492453.999 325 127.0.0.1 TCP_MISS/404 588 GET http://us.archive.ubuntu.com/ubuntu/dists/precise/InRelease - DIRECT/91.189.91.13 text/html 1367492454.113 114 127.0.0.1 TCP_MISS/404 596 GET http://us.archive.ubuntu.com/ubuntu/dists/precise-updates/InRelease - DIRECT/91.189.91.13 text/html
然而,大部分下載的包並沒有被記憶體,而且似乎根本沒有通過 Squid,也就是說,當它們被下載時,我可以看到大量的網路使用,並且它們沒有出現在 Squid 訪問日誌中。
所以我的問題是如何配置 Apt 以對所有請求使用代理?
順便說一句,我還嘗試通過設置環境變數進行配置
http_proxy
:config.vm.provision :shell, :inline => "echo 'export http_proxy=http://10.0.2.2:3128' >> /etc/profile.d/proxy.sh"
這具有相同的效果 - 一些請求似乎正在命中 Squid,但不是所有請求,尤其是實際的包。
apt 可能對所有請求都使用 squid,但 squid 沒有記憶體結果。您可以通過嗅探流量來驗證這一點,或者在 apt 下載包時關閉 squid 並查看它們是否失敗。您的 squid 配置中的 maximum_object_size 是多少?
即使您的問題可能在 squid 配置中,為了回答這個主題,現在有vagrant-proxyconf外掛。您可以通過以下方式安裝它:
vagrant plugin install vagrant-proxyconf
有了它,您可以在全域指定 Apt 代理,
$HOME/.vagrant.d/Vagrantfile
而無需在所有項目特定的 Vagrantfile 中使用 shell 配置器。例子:
Vagrant.configure("2") do |config| config.apt_proxy.http = "http://10.0.2.2:3128" config.apt_proxy.https = "http://10.0.2.2:3128" end
或預設代理配置:
Vagrant.configure("2") do |config| if Vagrant.has_plugin?("vagrant-proxyconf") config.proxy.http = "http://192.168.0.2:3128" config.proxy.https = "http://192.168.0.2:3128" config.proxy.no_proxy = "localhost,127.0.0.1,.example.com" end # ... other stuff end