前言

国内的开发者或多或少都会因为网络而烦恼,因为一些特殊原因有时候网络不好的时候需要使用代理才能完成对应的操作。原来我一直都是使用斐讯路由器然后刷了梅林的固件,直接在路由器层面设置转发代理,把一些国内网络不好的网站都走代理,这样的好处就是不用每台设备都设置ssr。

后来工作了,就没这么方便了,但是工作设备也比较固定嘛,开一下ssr也不费事。后来我发现一个怪事,同样是一个git地址,chrome访问正常可以zip下载,但是在终端里面一直503。后来查询资料才了解到,原来ssr的代理没有办法在终端生效,这样很多东西都非常麻烦,更新on myzsh看运气,在homebrew下载东西基本都挂,git克隆看天气,docer下载镜像等半天,使用国内各种为爱发电镜像源也是参差不齐,怎么用怎么不爽,非常影响开发。于是研究了一下,在这这记录下来。

查看是否生效

因为后面会用到,所以提前说一下,因为要确认是否代理成功,我们可以使用curl这个命令,然后去获取一些公益检测ip的网站,curl后网站会返回你访问它的这个公网ip,从而可以检测你是否代理成功。下面提供两个,因为有时候网站会挂掉(毕竟为爱发电网站)

curl cip.cc
curl ip.sb

没有代理成功(已打码)

为什么终端不会走代理

可以确定的是在mac下(其实win也是不会)使用ssr代理后不管是开全局还是按照规则在终端都不会生效,但是关于原因众说纷纭,大家都比较认可的理由是ssr代理类软件默认是代理socket5,而终端是http。真的是这样吗,我们来看看

我们设置规则代理,然后检查一下规则里面代理的协议,可以看到确实是socket5

可以看到确实代理的是socket5

此时自然是终端没代理成功

但是当我设置成全局代理,并且打开ssr的http代理设置以后,其实终端里面也不会成功,并没有什么*用

那到底是什么理由呢,其实我也不知道,但是我更同意stackExchange一位大佬给出的解释,他说mac的shell和系统设置是两套规则,shell是先于macOS诞生,在系统设置里面的设置代理在终端其实是不会生效的,系统也不会帮你去按照终端规则去设置一下。如果想要终端代理生效,需要单独对终端进行操作。

大佬的解释

我为什么会比较认同呢,是因为ssr本身其实就是开了一个本地的代理服务,你给它这个固定端口发过去的请求它才会进行代理转发然后返回,系统设置确实设置了网络的转发到这个端口,但是可能这个设置不会对终端生效,如果需要终端生效需要单独对终端设置,把终端里面的网络请求都转发到ssr启动的这个端口上。

设置终端走代理

终端设置完全真正的代理需要配合插件,比较麻烦,而且…主要是我自己设置代理都是一些临时性的需求,所以这里介绍一个简单的代理方法。

主流shell中都有好几个代理的系统变量,大多数的应用都遵循它,这里简单说三个,这里使用了export的命令,我在另外一篇文章里面说过,大家可以去翻一下,这个命令在当前的shell窗口中设置一个系统环境变量,这个变量只在当前shell窗口中生效,关闭再重新打开一个shell窗口以后这个系统环境将失效,如果想要一直代理可以把这个环境变量写入到启动文件中(例如~/.zshrc),启动文件介绍我也写过一篇文章,大家可以翻一下。

# 代理http
export http_proxy="socks5://127.0.0.1:1080"
# 代理https
export https_proxy="socks5://127.0.0.1:1080"
# 代理所有协议,其中包括ftp等
export ALL_PROXY="socks5://127.0.0.1:1080"

其中的原因大家可以浏览参考中的2和3,常见的软件命令都会使用这个系统环境变量,如果为空则直连如果有值则会转发到这个变量的代理上。其中git还提供应用变量设置,设置它可以单纯的让git每次都走你设置的代理,并且每次打开都会生效,因为这是git的软件全局设置

# 设置如下
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'# 取消如下
git unset http_proxy
git unset https_proxy

设置成功后,再进行检测,已经代理到线路上面的ip、

ladder就是上面那一堆命令的简化

结合alias做到灵活代理

如果你看过我原来写过的介绍linux快捷指令的文章,你可以结合其中的alias来完成更加灵活的代理,因为考虑到我们的使用场景,除了前面git可以单独配置应用的全局以后,我们好像在终端中不是那么需要始终的代理设置,确实代理的带宽和延迟上都没有直连好,但是有时候需要的工具或者框架服务器又在国外,不得不开代理。

虽然上面的命令可以解决这个问题,但是我很懒,然后每次执行上面一大堆命令,非常麻烦。使用alias设置一个快捷命令,然后每次输入就可以开启,用完关闭窗口下次再进来这个代理失效,只有需要的时候输入一下,不用输入一大串(往往这种命令,你都要打开记事本,然后复制粘贴)

alias ladder='export http_proxy=http://127.0.0.1:1087'

我这样配置已经够用了

参考

  1. 为什么terminal终端不能使用系统代理
  2. git config httpproxy
  3. using-homebrew-behind-a-proxy

MacOS设置终端代理相关推荐

  1. mac、windows 设置终端代理

    摘自:设置mac终端走代理 使用包管理器的命令下载github的包时,会出现卡住的情况,大多是因为GFW的问题,这时候就需要给命令行设置代理 MacOS 执行以下两条命令.在终端关闭之前有效.端口在s ...

  2. 命令行查看、设置和取消git或终端代理

    1. git代理 1.1 查看git代理 git config --global -l 1.2 设置git代理 1.2.1命令行设置(临时) //设置全局代理 //http git config -- ...

  3. MacOS代理设置(桌面应用代理设置Terminal代理设置)

    MacOS代理分为桌面应用代理设置&Terminal代理设置,使用代理软件默认只会开启桌面应用代理,Terminal代理需要单独配置 桌面应用代理设置 Terminal查看桌面应用代理设置情况 ...

  4. 电脑如何设置终端设置代理_如何设置一个严肃的Kubernetes终端

    电脑如何设置终端设置代理 by Chris Cooney 克里斯·库尼(Chris Cooney) 如何设置一个严肃的Kubernetes终端 (How to set up a serious Kub ...

  5. ubuntu 13.10 终端代理上网设置。

    1.临时通过http代理使用apt-get 在使用apt-get之前,在终端中输入以下命令(根据您的实际情况替换yourproxyaddress和proxyport). export http_pro ...

  6. Linux配置终端代理

    配置终端代理 一般 Linux 系统上的终端不会共享使用全局代理,需要额外配置 终端不走代理主要是终端不读取系统的配置,只认终端的变量,我们可以直接命令行设置代理,也可在~/.bashrc或~/.zs ...

  7. macOS美化终端:homebrew、ohmyzsh、字体、powerlevel10k、exa、插件

    一.设置代理 查看详细代理教程:macOS Linux 终端设置http https SOCKS代理 二.安装homebrew 点我进官网教程 1.Install Homebrew (on macOS ...

  8. Puppeteer设置浏览器代理的三种思路

    0 背景 Puppeteer是google推出的操作浏览器的框架.当我们通过框架操作浏览器去访问页面通常需要设置代理.本文简要总结设置代理的方式. 1 通过启动参数设置代理 我们通过puppeteer ...

  9. Linux下实现自动设置SSH代理

    SSH的巨大价值体现在能够配置为代理服务器上.不像在Windows下每次还需要手动登录设置,Linux有很好的工具链能够实现自动设置SSH代理,就是expect和ssh的联合使用,再加上proxych ...

最新文章

  1. 应届生想要获取web前端开发岗位?这份技能攻略,面试攻略别错过!
  2. 浅谈Java throw, throws, try catch异常处理
  3. Pycharm如何设置自定义背景颜色
  4. 全球及中国电池行业需求前景与十四五投资规划分析报告2022-2028年版
  5. matlab作动态函数曲线图,[转载]Matlab中使用Plot函数动态画图方法总结
  6. matlab访问数组的元素,使用分类数组访问数据
  7. 发生生成错误是否继续并运行上次的成功生成_JavaScript 是如何运行的?
  8. nutshell_Nutshell中的Java 8语言功能-第2部分
  9. 信号模型噪声服从零均值高斯分布_非高斯噪声下基于分数低阶循环谱的调制识别方法...
  10. [转]JavaScript 删除数组中指定值的元素
  11. cookie 单值设置
  12. JSP中文件上传的关键步骤
  13. 《深入理解Java虚拟机》 第4章 虚拟机性能监控与故障处理工具
  14. Hexo报错Usage: hexo command处理及图片显示问题
  15. 文献管理三剑客之Mendeley
  16. 读取xml文件分析 EntityName 时出错的解决方案
  17. mysql data目录 恢复_利用mysql data文件夹恢复数据
  18. java 读取文件成字节数组_java读取文件为字节数组
  19. KNN算法实现鸢尾花的分类
  20. TIA博途WINCC中如何获取当前画面编号并发送给PLC?

热门文章

  1. circos 染色体进阶技巧
  2. 解决 ubuntu 14.04下,eclipse adt-bundle-linux 闪退的问题,最新ADT-23.0.7
  3. Eclipse ADT 报错 Invalid keystore format
  4. bean的加载-配置文件的解析
  5. 转载:西门子 Step7 V5.5 SP4中文版
  6. python二进制方式读取文件,并将读取出的数据以txt的格式保存
  7. 【设计模式-手写源码-附1】-简单工厂模式-基于魔兽争霸冰封王座
  8. [python]线性规划作图及求解
  9. c语言编程绘制动态波形,绘制wav波形图
  10. python猫眼电影分析_用Python 爬取猫眼电影数据分析《无名之辈》