给 iTerm 终端设置代理

Posted wengle520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给 iTerm 终端设置代理相关的知识,希望对你有一定的参考价值。

本文介绍如何为自己的终端设置代理,从而实现在命令行中访问Google。

1. 背景

当你使用SS FQ时,大部分浏览器都可以成功访问Google,但是在命令行下执行curl https://www.google.com时,会超时失败。对于类似的这种情况,本文将解释出现这种现象的原因,并给出有效的解决方案。

2. 原因

  1. 启动SS时,会创建两个代理,一个是ss-local,一个是privoxy;ss-local用于代理socks5请求,privoxy用于代理所有的HTTP请求
  2. 启动SS时,不管用PAC模式还是全局模式,都会修改网络系统代理设置
    1. 网络系统代理设置从哪里看?Mac:系统偏好设置-->网络-->高级-->代理
    2. 在代理页中可以看到
    3. 技术图片
    4. 从上图可以看到,网页代理服务器是一个部署在本地的代理服务器
    5. 这个本地代理服务器实际上是SS启动时创建的,我们可以从SS的HTTP代理设置中看到
    6. 技术图片
  3. 大部分浏览器的默认代理设置是系统代理
    1. 技术图片
    2. 因此浏览器访问https://www.google.com时,实际上是把请求发送给了SS创建的本地代理服务器127.0.0.1:1087
    3. 技术图片
    4. 上图的privoxy就是SS创建的本地HTTP代理服务器127.0.0.1:1087
    5. privoxy会把接收到的http/https请求转发给本地的ss-local服务,ss-local服务通过socks5协议发送加密过的请求数据到远端的SS server,SS server解密请求数据后,将真实的请求https://www.google.com发送到Google的服务器
    6. 技术图片
    7. 上图是privoxy的配置文件,privoxy的监听地址是:127.0.0.1:1087,转发地址是:127.0.0.1:1080
  4. 终端软件iterm/iterm2等默认是没有设置请求代理,因此无法访问https://www.google.com

3. 解决方案

  1. 通过下面的环境变量就可以设置HTTP代理:

    export http_proxy=http://127.0.0.1:8087
    export https_proxy=$http_proxy
  2. 为了能够快速切换代理,可以在 ~/.zshrc 或者 ~/.bash_profile 中添加这样的alias:

    alias goproxy='export http_proxy=http://127.0.0.1:8087 https_proxy=http://127.0.0.1:8087'
    alias disproxy='unset http_proxy https_proxy'

4. 参考资料

  1. 给 iTerm 终端设置代理
  2. 利用 Privoxy 让命令行下的 wget 和 curl 等命令实现自动代理

以上是关于给 iTerm 终端设置代理的主要内容,如果未能解决你的问题,请参考以下文章

MacOS ClashX 配置代理端口为0问题7890 配置iterm2终端代理

iTerm 2 使用代理

一文带你配置使用Iterm2终端神器(自定义主题+高亮+补全...)

Mac OS 终端美化:iterm2 + zsh + oh~my~zsh 设置教程

ITerm让MAC终端更加灵活高效

美化你的终端利器Iterm2