Proxy

Proxy

很多程序支持 HTTP_PROXY 和 HTTPS_PROXY env 环境变量这种通用方式设置 HTTP 代理。

export HTTP_PROXY=http://127.0.0.1:1080
export HTTPS_PROXY=http://127.0.0.1:1080
export HTTP_PROXY=socks5://127.0.0.1:1080

HTTP_PROXY 和 HTTPS_PROXY 分别为访问 http 和 https 协议的 URL 时使用的代理。其它的同类变量还有 FTP_PROXY, ALL_PROXY 等,但使用场景和支持的程序较少。以上环境变量名使用全小写亦可。

一些程序还支持特有的参数或配置文件方式设置代理。

代理地址协议类型: http://, socks5://, socks5h://...。 socks5h 为使用代理解析域名。如果不指定 protocol 部分,很多程序默认认为是 http:// 类型代理。

部分程序额外支持 NO_PROXY 环境变量设置。值为 comma-separated 的不使用代理的 host 值列表,IP 地址可以使用 CIDR 格式。

架设 Proxy server 参考: Proxy server

Go

Go 语言标准的 http (client) 库默认自动支持 env 的 HTTP_PROXY / HTTPS_PROXY / NO_PROXY 代理配置。

Go 语言 net / http 标准库使用 socks5 代理时默认远端域名解析,与使用 socks5h 效果相同。

curl

支持 http_proxy, HTTPS_PROXY, ALL_PROXY, NO_PROXY 环境变量。注意 http_proxy 必须小写(原因是以前流行的 HTTP CGI 程序会设置 HTTP_ 开头的环境变量为 request headers 的值,为了避免这些程序调用 curl 时引起安全问题),其他环境变量名全大小写版本均可。

可以使用 -x 参数设置 http 代理:

curl -x http://127.0.0.1:1080 https://ipinfo.io

设置 socks5 代理:

curl --socks5-hostname 127.0.0.1:1080 ifcfg.co
  • --socks5 : 使用 socks5 代理。
  • --socks5-hostname : 使用 socks5 代理 + 远端域名解析。

lynx

vim /etc/lynx-site.cfg

http_proxy:http://127.0.0.1:1080

npm

npm -g config set proxy http://127.0.0.1:1080
npm -g config set https-proxy http://127.0.0.1:1080

git

git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

apt

vim /etc/apt/apt.conf.d/proxy.conf

Acquire::http::Proxy "http://127.0.0.1:1080/";

yum (CentOS & RedHat)

vim /etc/yum.conf

[main]
proxy=http://127.0.0.1:1080/
#proxy_username=username
#proxy_password=paswword

gem (ruby)

gem install -p http://127.0.0.1:1080/ rails

For permanent setting:

vi ~/.gemrc

http_proxy: http://127.0.0.1:1080/

docker

docker systemd 代理设置

适用于 docker pull 等 cli 操作。

mkdir -p /etc/systemd/system/docker.service.d

vim /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:1080"
Environment="HTTPS_PROXY=http://127.0.0.1:1080"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

设置 NO_PROXY 环境变量为不使用代理连接的 IP 和 hostname 列表,以逗号分割。(匹配 hostname 规则类似 dnsmasq,即除非以 "." 开头,否则 hostname 也匹配子域名。可以使用 * 匹配域名的某个分段部分)

dockerd代理的修改实际上是改systemd的配置,因此需要重载systemd并重启dockerd才能生效。

systemctl daemon-reload
systemctl restart docker

systemctl show --property=Environment docker

Environment=HTTP_PROXY=http://proxy.example.com:80 HTTPS_PROXY=https://proxy.example.com:443 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp

注: WSL2 等环境下 systemd 不可用 (无 pid=0 process),测试直接设置 HTTP_PROXY 和 HTTPS_PROXY 环境变量即可。

docker container 代理设置

/root/.docker/config.json

{
        "proxies":{
                "default":{
                        "httpProxy": "http://127.0.0.1:1080",
                        "httpsProxy": "http://127.0.0.1:1080",
                        "noProxy": "*.test.example.com,.example2.com"
                }
        }
}

设置后新创建的 container 默认会自动设置 HTTP_PROXY 和 HTTPS_PROXY 环境变量。

Chrome

Windows Chrome 默认使用系统代理。启动 chrome.exe 可以使用 --proxy-server="socks5://127.0.0.1:1080" 指定使用代理。也可以通过浏览器扩展设置代理。

Chrome 使用 socks5:// 代理默认远端解析域名。

Electron

Electron 创建的程序也支持 Chrome 的 --proxy-server 启动参数设置代理。参考

Windows

Windows 支持设置系统级别的代理,但只有部分程序支持。参考: Windows/Proxy


Last update: 2023-12-19 03:23:22 UTC