给各种应用喂代理的方法

记录一些给各种应用喂代理的方法

本来打算整理详细一些再写的但是似乎要忘记了就先写后更新好了

当然最通用的方法是透明代理

也包括各种 tun 程序什么的

通用设置

1
2
$env:HTTP_PROXY="http://127.0.0.1:1080"
$env:HTTPS_PROXY="http://127.0.0.1:1080"
1
2
3
4
5
6
export http_proxy="http://127.0.0.1:1080"
export HTTP_PROXY="http://127.0.0.1:1080"
export https_proxy="http://127.0.0.1:1080"
export HTTPS_PROXY="http://127.0.0.1:1080"
export all_proxy="socks5://127.0.0.1:1080"
export ALL_PROXY="socks5://127.0.0.1:1080"
1
http_proxy="http://127.0.0.1:1080" ./program --options

对于 Linux 下需要 root 权限的,可以使用 -E 选项使用当前用户的环境变量:

1
sudo -E apt update

作用对象

这个设置能被应用全靠应用程序自己读环境变量;因此是否实现、怎么实现也全靠应用程序自己。

在应用程序访问一个 URL 时,会根据 URL 的 Scheme 分类为 HTTPS 和 HTTP,然后分别应用 HTTP_PROXYHTTP_PROXY , 或者使用 fallback 机制 (ALL_PROXY -> HTTPS_PROXY -> HTTP_PROXY -> NOPROXY` 类似)。

对 Linux 来说,环境变量是大小写敏感的,但是似乎也没有一个规范说明该大写还是小写,于是似乎只能都加上或者都试试了。

Chromium (Electron)

命令行参数:

1
chromium --proxy-server="socks5://127.0.0.1:1080"

支持的代理方法

作用对象

这是 Chromium / Electron 的默认参数,不少 Electron 应用根本不会动这部分设置(也包括这些设置);

当然很多商业应用会禁用。

支持

  • Typeroa

VSCode

Settings -> (User/Workspace) -> Application -> Proxy

注意 Remote 插件会把这个设置复制到远程的 vscode-server 上;最好使用一个公共服务器。

Chrome

TODO

Firefox

应用级

Menu -> Settings (about:preferences) -> General -> Network Settings

点击 Settings

Manual proxy configuration

插件

如果要自由切换是否使用代理、使用哪个代理,可以使用 Extensions (about:addons):

例如 FoxyProx

注意在 Proxy by Patterns 模式下 (可在 FoxyProxy 图标 选择),不会使用 Proxy 内部设置的 Pattern,而是使用 Options -> Global Exclude 下的黑名单:

1
2
3
4
5
6
7
localhost
localhost:*
*.homelab
*.homelab:*
127.0.0.1/8
172.29.83.189/8
192.168.31.215/16

Git

1
2
git config http.proxy "http://127.0.0.1:1080"
git config --global http.proxy "http://127.0.0.1:1080"

Java 应用程序

设置 JVM 参数

1
2
3
java "-Dhttp.proxyHost=127.0.0.1" "-Dhttp.proxyPort=1080" "-Dhttps.proxyHost=127.0.0.1" "-Dhttps.proxyPort=1080" -jar application.jar

java "-DsocksProxyHost=127.0.0.1" "-DsocksProxyPort=1080" -jar application.jar # ?

作用对象

TODO: System.Properties 是作用在什么上的,java程序是否需要修改,Netty是否适配

支持

  • Minecraft

    注意服务器可能要求 认证 IP 和登录 IP 一致

Rust/Rustup,Cargo

Rustup

适用通用设置

Cargo

在 CARGO_HOME (.cargo) 下创建 config.toml 添加作为全局设置

1
2
3
4
5
[http]
proxy = "http://127.0.0.1:1080"

[https]
proxy = "https://127.0.0.1:1080"

或者在 workspace 下的 .cargo 内添加 作为项目设置:cargo 配置

另:镜像设置

1
2
3
4
5
[source.crates-io]
replace-with = 'ustc'

[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

Golang

适用通用设置

也可以使用 GOPROXY,一个专用的 golang module 代理

1
2
export GO111MODULE=on
export GOPROXY=https://goproxy.cn

或者

1
2
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

Docker

Docker本身(拉取镜像等)

适用通用设置

也可以在 .docker/config.json 配置

1
2
3
4
5
6
7
8
9
{
"proxies": {
"default": {
"httpProxy": "http://127.0.0.1:1080",
"httpsProxy": "http://127.0.0.1:1080",
"noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
}
}

Docker Build 内部容器执行(不固定在dockerfile中)

执行 docker build 的时候,build 过程中执行的命令 (RUN) 有时候也需要使用代理。

1
2
3
4
sudo docker build \
--build-arg http_proxy=http://172.0.0.1:1080 \
--build-arg https_proxy=http://172.0.0.1:1080 \
.

使用 –build-arg 将环境变量传递至 docker build 运行的容器内。适用于build 执行步骤适配通用设置的情况。

Author: DWCarrot
Link: https://dwcarrot.github.io/blog/2024/06/09/Tips-of-proxy-settings-in-different-applications/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.