Linux/Mac系统代理配置完全指南
系统代理配置指南
1. 环境变量配置
1.1 临时配置
# HTTP代理
export http_proxy="http://proxy.example.com:8080"
export HTTP_PROXY="http://proxy.example.com:8080"
# HTTPS代理
export https_proxy="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
# SOCKS代理
export all_proxy="socks5://proxy.example.com:1080"
export ALL_PROXY="socks5://proxy.example.com:1080"
# 不走代理的地址
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
export NO_PROXY="localhost,127.0.0.1,localaddress,.localdomain.com"
1.2 永久配置
# 添加到~/.bashrc或~/.zshrc
cat >> ~/.bashrc << 'EOF'
# Proxy Settings
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export all_proxy="socks5://proxy.example.com:1080"
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
# 代理开关函数
proxy_on() {
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export all_proxy="socks5://proxy.example.com:1080"
echo "代理已开启"
}
proxy_off() {
unset http_proxy
unset https_proxy
unset all_proxy
echo "代理已关闭"
}
EOF
source ~/.bashrc
2. 应用程序代理
2.1 Git代理配置
# HTTP/HTTPS代理
git config --global http.proxy "http://proxy.example.com:8080"
git config --global https.proxy "http://proxy.example.com:8080"
# SOCKS代理
git config --global http.proxy "socks5://proxy.example.com:1080"
git config --global https.proxy "socks5://proxy.example.com:1080"
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
# 针对特定域名设置代理
git config --global http.https://github.com.proxy "http://proxy.example.com:8080"
2.2 NPM代理配置
# 设置代理
npm config set proxy "http://proxy.example.com:8080"
npm config set https-proxy "http://proxy.example.com:8080"
# 取消代理
npm config delete proxy
npm config delete https-proxy
# 使用.npmrc文件
cat > ~/.npmrc << EOF
proxy=http://proxy.example.com:8080
https-proxy=http://proxy.example.com:8080
EOF
3. 系统级代理
3.1 NetworkManager配置(Linux)
# 查看网络连接
nmcli connection show
# 设置代理
nmcli connection modify "连接名称" \
proxy.method "automatic" \
proxy.browser-only "false" \
proxy.pac-url "http://proxy.example.com/proxy.pac"
# 手动代理设置
nmcli connection modify "连接名称" \
proxy.method "manual" \
proxy.http "proxy.example.com:8080" \
proxy.https "proxy.example.com:8080" \
proxy.socks "proxy.example.com:1080"
# 应用更改
nmcli connection up "连接名称"
3.2 Mac系统代理
# 使用networksetup命令
# 设置Web代理
networksetup -setwebproxy "Wi-Fi" proxy.example.com 8080
# 设置安全Web代理
networksetup -setsecurewebproxy "Wi-Fi" proxy.example.com 8080
# 设置SOCKS代理
networksetup -setsocksfirewallproxy "Wi-Fi" proxy.example.com 1080
# 开启代理
networksetup -setwebproxystate "Wi-Fi" on
networksetup -setsecurewebproxystate "Wi-Fi" on
networksetup -setsocksfirewallproxystate "Wi-Fi" on
4. Docker代理配置
4.1 Docker守护进程代理
# 创建或编辑daemon.json
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
# 重启Docker服务
systemctl daemon-reload
systemctl restart docker
4.2 Docker容器代理
# 在Dockerfile中设置
ENV http_proxy="http://proxy.example.com:8080"
ENV https_proxy="http://proxy.example.com:8080"
# 在docker-compose.yml中设置
version: '3'
services:
app:
environment:
- http_proxy=http://proxy.example.com:8080
- https_proxy=http://proxy.example.com:8080
5. 代理验证
5.1 带认证的代理
# 用户名密码格式
export http_proxy="http://username:password@proxy.example.com:8080"
export https_proxy="http://username:password@proxy.example.com:8080"
# 使用.netrc文件
cat > ~/.netrc << EOF
machine proxy.example.com
login username
password your_password
EOF
chmod 600 ~/.netrc
5.2 测试代理
# 测试HTTP代理
curl -I http://www.google.com
# 测试HTTPS代理
curl -I https://www.google.com
# 查看当前IP
curl ipinfo.io
# 测试代理连接
nc -zv proxy.example.com 8080
6. 自动化配置
6.1 代理配置脚本
#!/bin/bash
# proxy-manager.sh
PROXY_HOST="proxy.example.com"
PROXY_PORT="8080"
PROXY_URL="http://$PROXY_HOST:$PROXY_PORT"
setup_proxy() {
export http_proxy=$PROXY_URL
export https_proxy=$PROXY_URL
git config --global http.proxy $PROXY_URL
git config --global https.proxy $PROXY_URL
npm config set proxy $PROXY_URL
npm config set https-proxy $PROXY_URL
echo "代理已配置"
}
remove_proxy() {
unset http_proxy
unset https_proxy
git config --global --unset http.proxy
git config --global --unset https.proxy
npm config delete proxy
npm config delete https-proxy
echo "代理已移除"
}
case "$1" in
"on")
setup_proxy
;;
"off")
remove_proxy
;;
*)
echo "用法: $0 {on|off}"
exit 1
;;
esac
7. 故障排查
7.1 常见问题
# 检查代理设置
env | grep -i proxy
# 测试代理连接
curl -v --proxy http://proxy.example.com:8080 http://www.google.com
# 检查SSL证书问题
curl -k https://www.google.com
# 检查DNS解析
dig @proxy.example.com www.google.com
7.2 日志分析
# 查看系统日志
journalctl -u NetworkManager
# 查看Docker代理日志
journalctl -u docker
# 测试代理性能
time curl -x http://proxy.example.com:8080 http://www.google.com
8. 安全建议
8.1 基本安全措施
- 使用HTTPS代理而不是HTTP
- 定期更改代理密码
- 限制代理访问范围
- 使用加密的配置文件
- 避免在公共脚本中硬编码凭据
8.2 最佳实践
- 使用环境变量而不是硬编码配置
- 为不同应用使用不同的代理配置
- 定期检查代理设置和日志
- 使用PAC文件进行智能代理
- 配置备份和版本控制