在 macOS 系统中,有多种方式可以配置网络代理。本教程将详细介绍各种代理配置方法,帮助您根据不同需求选择最适合的方案。
代理配置概述
代理类型说明
-
HTTP代理
- 用于网页浏览和HTTP流量
- 端口通常为8080、8888等
-
HTTPS代理
- 用于加密的HTTPS流量
- 通常与HTTP代理端口相同
-
SOCKS代理
- 支持更多协议和应用
- 端口通常为1080、1081等
-
FTP代理
- 专用于FTP文件传输
- 现在使用相对较少
系统级代理配置
通过系统偏好设置配置
-
打开网络设置
- 点击Apple菜单 → “系统偏好设置”
- 选择"网络"图标
-
选择网络接口
- 在左侧列表中选择当前使用的网络接口
- WiFi: 选择"Wi-Fi"
- 有线: 选择"以太网"
-
进入代理设置
- 点击"高级…“按钮
- 选择"代理"选项卡
-
配置代理类型
HTTP代理配置:
HTTP代理: ✓ 启用 代理服务器: 127.0.0.1 端口: 7890
HTTPS代理配置:
HTTPS代理: ✓ 启用 代理服务器: 127.0.0.1 端口: 7890
SOCKS代理配置:
SOCKS代理: ✓ 启用 代理服务器: 127.0.0.1 端口: 7891
-
设置绕过规则
在"忽略这些主机与域的代理设置"中添加:
*.local 169.254/16 127.0.0.1 localhost *.cn 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
-
保存设置
- 点击"好"保存代理设置
- 点击"应用"使设置生效
通过命令行配置
对于高级用户,可以使用命令行快速配置:
-
设置HTTP代理
# 设置HTTP代理 sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 7890 # 设置HTTPS代理 sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 7890 # 设置SOCKS代理 sudo networksetup -setsocksfirewallproxy "Wi-Fi" 127.0.0.1 7891
-
启用代理
# 启用所有代理 sudo networksetup -setwebproxystate "Wi-Fi" on sudo networksetup -setsecurewebproxystate "Wi-Fi" on sudo networksetup -setsocksfirewallproxystate "Wi-Fi" on
-
查看当前代理设置
# 查看所有网络服务 networksetup -listallnetworkservices # 查看代理配置 networksetup -getwebproxy "Wi-Fi" networksetup -getsecurewebproxy "Wi-Fi" networksetup -getsocksfirewallproxy "Wi-Fi"
-
关闭代理
# 关闭所有代理 sudo networksetup -setwebproxystate "Wi-Fi" off sudo networksetup -setsecurewebproxystate "Wi-Fi" off sudo networksetup -setsocksfirewallproxystate "Wi-Fi" off
应用级代理配置
浏览器代理设置
Safari
Safari 使用系统代理设置,无需单独配置。
Chrome
-
使用系统代理(默认)
- Chrome 默认使用系统代理设置
-
使用命令行参数
# 启动时指定代理 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --proxy-server="socks5://127.0.0.1:7891"
-
使用扩展程序
- 安装 Proxy SwitchyOmega 等扩展
- 可以更灵活地管理代理规则
Firefox
-
打开代理设置
- Firefox → 偏好设置 → 常规
- 向下滚动到"网络设置”
-
配置代理
- 选择"手动配置代理"
- 填入代理服务器信息
终端代理设置
-
临时设置
# 设置HTTP代理 export http_proxy=http://127.0.0.1:7890 export https_proxy=http://127.0.0.1:7890 # 设置SOCKS代理 export ALL_PROXY=socks5://127.0.0.1:7891
-
永久设置
编辑
~/.zshrc
或~/.bash_profile
:# 添加以下内容 export http_proxy=http://127.0.0.1:7890 export https_proxy=http://127.0.0.1:7890 export ALL_PROXY=socks5://127.0.0.1:7891 export no_proxy=localhost,127.0.0.1,*.local
-
条件性设置
创建代理开关函数:
# 在 ~/.zshrc 中添加 function proxy_on() { export http_proxy=http://127.0.0.1:7890 export https_proxy=http://127.0.0.1:7890 export ALL_PROXY=socks5://127.0.0.1:7891 echo "代理已开启" } function proxy_off() { unset http_proxy unset https_proxy unset ALL_PROXY echo "代理已关闭" } function proxy_status() { if [ -n "$http_proxy" ]; then echo "代理状态: 已开启" echo "HTTP代理: $http_proxy" echo "HTTPS代理: $https_proxy" echo "SOCKS代理: $ALL_PROXY" else echo "代理状态: 已关闭" fi }
Git代理配置
-
HTTP(S) 仓库代理
# 设置全局代理 git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy http://127.0.0.1:7890 # 仅为特定域名设置代理 git config --global http.https://github.com.proxy socks5://127.0.0.1:7891
-
SSH 仓库代理
编辑
~/.ssh/config
:Host github.com HostName github.com User git ProxyCommand nc -X 5 -x 127.0.0.1:7891 %h %p
-
取消代理设置
git config --global --unset http.proxy git config --global --unset https.proxy
高级代理配置
PAC文件配置
-
什么是PAC文件
- PAC (Proxy Auto-Configuration) 文件
- 使用JavaScript编写的代理规则
- 可以实现智能代理切换
-
创建PAC文件
创建
proxy.pac
文件:function FindProxyForURL(url, host) { // 本地地址直连 if (isInNet(host, "127.0.0.0", "255.0.0.0") || isInNet(host, "10.0.0.0", "255.0.0.0") || isInNet(host, "172.16.0.0", "255.240.0.0") || isInNet(host, "192.168.0.0", "255.255.0.0") || isPlainHostName(host)) { return "DIRECT"; } // 特定域名走代理 if (shExpMatch(host, "*.google.com") || shExpMatch(host, "*.youtube.com") || shExpMatch(host, "*.github.com")) { return "SOCKS5 127.0.0.1:7891"; } // 默认直连 return "DIRECT"; }
-
使用PAC文件
- 在系统代理设置中选择"自动代理配置"
- 填入PAC文件的URL或文件路径
代理链配置
-
什么是代理链
- 多级代理连接
- 增强隐私保护
- 绕过复杂网络限制
-
配置示例
# Clash配置示例 proxies: - name: "第一级代理" type: socks5 server: first-proxy.com port: 1080 - name: "第二级代理" type: http server: second-proxy.com port: 8080 proxy-groups: - name: "代理链" type: relay proxies: - "第一级代理" - "第二级代理"
代理测试与验证
连接测试
-
检查IP地址
# 检查外网IP curl -4 ip.sb curl -6 ip.sb # 检查IP归属地 curl cip.cc
-
测试特定网站
# 测试Google连接 curl -I https://www.google.com # 测试延迟 curl -o /dev/null -s -w "%{time_total}\n" https://www.google.com
-
DNS解析测试
# 检查DNS解析 nslookup google.com dig google.com
代理性能测试
-
延迟测试
# 使用ping测试(注意:SOCKS代理不支持ping) ping proxy-server.com # 使用curl测试HTTP延迟 curl -o /dev/null -s -w "连接时间: %{time_connect}s\n总时间: %{time_total}s\n" https://www.google.com
-
带宽测试
# 下载测试文件 curl -o /dev/null https://speed.cloudflare.com/__down?bytes=100000000
常见问题解决
代理设置不生效
-
检查代理服务状态
# 检查端口是否被监听 lsof -i :7890 netstat -an | grep 7890
-
验证代理配置
- 确认代理地址和端口正确
- 检查是否需要用户名密码验证
-
清除DNS缓存
sudo dscacheutil -flushcache sudo killall -HUP mDNSResponder
某些应用不走代理
-
检查应用代理设置
- 有些应用有独立的代理设置
- 需要单独配置
-
使用强制代理工具
- 使用 Proxifier 等工具
- 强制指定应用走代理
代理速度慢
-
选择合适的代理协议
- SOCKS5 通常比HTTP代理效率更高
- 选择地理位置较近的代理服务器
-
优化系统设置
- 调整TCP缓冲区大小
- 优化网络参数
自动化脚本
代理切换脚本
创建便捷的代理切换脚本:
#!/bin/bash
# 保存为 proxy_switch.sh
NETWORK_SERVICE="Wi-Fi"
PROXY_HOST="127.0.0.1"
HTTP_PORT="7890"
SOCKS_PORT="7891"
case "$1" in
"on")
echo "开启系统代理..."
sudo networksetup -setwebproxy "$NETWORK_SERVICE" $PROXY_HOST $HTTP_PORT
sudo networksetup -setsecurewebproxy "$NETWORK_SERVICE" $PROXY_HOST $HTTP_PORT
sudo networksetup -setsocksfirewallproxy "$NETWORK_SERVICE" $PROXY_HOST $SOCKS_PORT
sudo networksetup -setwebproxystate "$NETWORK_SERVICE" on
sudo networksetup -setsecurewebproxystate "$NETWORK_SERVICE" on
sudo networksetup -setsocksfirewallproxystate "$NETWORK_SERVICE" on
echo "系统代理已开启"
;;
"off")
echo "关闭系统代理..."
sudo networksetup -setwebproxystate "$NETWORK_SERVICE" off
sudo networksetup -setsecurewebproxystate "$NETWORK_SERVICE" off
sudo networksetup -setsocksfirewallproxystate "$NETWORK_SERVICE" off
echo "系统代理已关闭"
;;
"status")
echo "当前代理状态:"
networksetup -getwebproxy "$NETWORK_SERVICE"
networksetup -getsecurewebproxy "$NETWORK_SERVICE"
networksetup -getsocksfirewallproxy "$NETWORK_SERVICE"
;;
*)
echo "用法: $0 {on|off|status}"
echo " on - 开启系统代理"
echo " off - 关闭系统代理"
echo " status - 查看代理状态"
exit 1
;;
esac
使用方法:
# 赋予执行权限
chmod +x proxy_switch.sh
# 开启代理
./proxy_switch.sh on
# 关闭代理
./proxy_switch.sh off
# 查看状态
./proxy_switch.sh status
总结
macOS 提供了多种灵活的代理配置方式:
- 系统级配置: 影响所有应用,配置简单
- 应用级配置: 更精细的控制,适合特定需求
- 命令行配置: 适合开发者和高级用户
- PAC文件: 实现智能代理规则
选择合适的配置方式取决于您的具体需求。对于一般用户,建议使用 ClashX 等专业工具来管理代理设置,这样更加方便和安全。
通过本教程的学习,您应该能够在 macOS 上熟练配置和管理网络代理了。如果遇到问题,建议查看相关软件的官方文档或寻求技术支持。