Link

为 Linux 配置 HTTP 代理

目录

  1. 为 Linux 配置 HTTP 代理
  2. 工具
  3. 命令行配置
  4. yum
  5. apt
  6. Docker 设置代理
    1. docker daemon
    2. Docker client
  7. 参考资料

工具

经常遇到内网中只有一台机器可以连接到互联网,其他机器默认未开通外网访问权限,这时候可以临时在这台机器上搭建代理服务器,最简单的方式便是搭建 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

https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-set-the-proxy-for-apt-for-ubuntu-18-04/