为 Linux 配置 HTTP 代理
目录
工具
经常遇到内网中只有一台机器可以连接到互联网,其他机器默认未开通外网访问权限,这时候可以临时在这台机器上搭建代理服务器,最简单的方式便是搭建 HTTP 代理服务器,常用软件有: Windows 上的 ccproxy,Linux 上的 squid 等。
然后在没有外网访问权限的机器安装 proxy 客户端,连接到上面搭建的 server。
通常 windows 下可以使用 IE 浏览器的 HTTP 代理设置;
Linux 可以使用环境变量为终端提供代理,部分应用也可以单独配置代理,如果是图形化界面的 Linux,可以在系统网络配置中添加代理;
如果使用 mac,可以使用网络配置里面的代理,也可以用 Proxifier 这种工具。
命令行配置
Linux 最简单的方法就是通过环境变量设置代理,此方式仅针对终端生效,可以用于wget、curl、apt、yum等。
直接输入下列命令即可:
export http_proxy=http://proxy_Address:port
export https_proxy=https://proxy_Address:port
如果代理服务器开启了用户认证,使用下列配置:
http_proxy="http://proxyuser:password@proxy_Address:3128"
使用下列参数添加白名单
export no_proxy=localhost,127.0.0.1,10.29.9.0/24,test.com
如果要让当前用户的所有会话生效,可以将上述配置放在 ~/.bashrc 文件中。
如果全局让所有用户生效,可以放在 /etc/profile 中。
部分应用也可以使用自己的代理配置,下面是一些收藏:
yum
编辑/etc/yum.conf文件,添加下列行:
[main]
………………
proxy=http://<Proxy-Server-IP-Address>:<Proxy_Port>
proxy_username=<Proxy-User-Name>
proxy_password=<Proxy-Password>
………………
apt
创建并编辑下列文件 /etc/apt/apt.conf.d/proxy.conf:
#设置 HTTP 代理
Acquire::http::Proxy "http://user:[email protected]:port/";
#设置 HTTPS 代理
Acquire::https::Proxy "http://user:[email protected]:port/";
下一次使用 apt 时生效。
Docker 设置代理
docker daemon
Docker daemon 的代理用于让 docker pull image 时可以访问互联网。
创建/etc/systemd/system/docker.service.d文件夹
mkdir -p /etc/systemd/system/docker.service.d/
创建 http-proxy.conf 文件,并添加下列
vi /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"
如果使用的是 HTTPS 代理,则对应的创建下列文件:/etc/systemd/system/docker.service.d/https-proxy.conf ,添加HTTPS_PROXY环境变量:
[Service]
Environment="HTTPS_PROXY=https://proxy.example.com:443/"
另外, 可以使用 NO_PROXY 参数来设置代理白名单,例如下面的配置中就禁止了 localhost、127.0.0.1、example.com 后缀的域名(含example.com),.corp.local 结尾的域名(不含 corp.local) 通过代理访问:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,example.com,.corp.local"
也支持一个文件配置多行
cat /etc/systemd/system/docker.service.d/https-proxy.conf
[Service]
Environment="HTTP_PROXY=http://10.111.0.201:3128"
Environment="HTTPS_PROXY=http://10.111.0.201:3128"
Environment="NO_PROXY=localhost,127.0.0.1,test.com"
重新加载并重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker client
Docker client 的代理用于让容器中的应用可以通过代理访问到互联网。
在启动容器的用户目录下创建此文件 :~/.docker/config.json ,在文件中添加下列配置
{
"proxies":
{
"default":
{
"httpProxy": "http://127.0.0.1:3001",
"httpsProxy": "http://127.0.0.1:3001",
"noProxy": "*.test.example.com,.example2.com"
}
}
}
当有新的容器创建后,Docker 会自动将代理相关的配置通过环境变量的形式传递给容器,容器便无需额外的配置便能使用 proxy。
参考资料
https://www.linuxtechi.com/proxy-settings-yum-command-on-rhel-centos-servers/
https://docs.docker.com/network/proxy/
https://docs.docker.com/config/daemon/systemd/#httphttps-proxy