记录一些给各种应用喂代理的方法
本来打算整理详细一些再写的但是似乎要忘记了就先写后更新好了
当然最通用的方法是透明代理
也包括各种 tun 程序什么的
通用设置
1 | $env:HTTP_PROXY="http://127.0.0.1:1080" |
1 | export http_proxy="http://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_PROXY
和 HTTP_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 | localhost |
Git
1 | git config http.proxy "http://127.0.0.1:1080" |
Java 应用程序
设置 JVM 参数
1 | java "-Dhttp.proxyHost=127.0.0.1" "-Dhttp.proxyPort=1080" "-Dhttps.proxyHost=127.0.0.1" "-Dhttps.proxyPort=1080" -jar application.jar |
作用对象
TODO: System.Properties 是作用在什么上的,java程序是否需要修改,Netty是否适配
支持
Minecraft
注意服务器可能要求 认证 IP 和登录 IP 一致
Rust/Rustup,Cargo
Rustup
适用通用设置
Cargo
在 CARGO_HOME (.cargo
) 下创建 config.toml
添加作为全局设置
1 | [http] |
或者在 workspace 下的 .cargo
内添加 作为项目设置:cargo 配置
另:镜像设置
1 | [source.crates-io] |
Golang
适用通用设置
也可以使用 GOPROXY,一个专用的 golang module 代理
1 | export GO111MODULE=on |
或者
1 | go env -w GO111MODULE=on |
Docker
Docker本身(拉取镜像等)
适用通用设置
也可以在 .docker/config.json
配置
1 | { |
Docker Build 内部容器执行(不固定在dockerfile中)
执行 docker build 的时候,build 过程中执行的命令 (RUN) 有时候也需要使用代理。
1 | sudo docker build \ |
使用 –build-arg 将环境变量传递至 docker build 运行的容器内。适用于build 执行步骤适配通用设置的情况。