Linux/Mac系统代理配置完全指南

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文件进行智能代理
  • 配置备份和版本控制