Skip to main content

测试环境代理用 squid 正向代理并修改 hosts

squid 正向代理,用于生产环境的客户端,走测试环境的请求。

脚本文件

#!/bin/bash

echo '新建配置文件目录: /tmp/squid/'
mkdir -p /tmp/squid
rm -f /tmp/squid/hosts
rm -f /tmp/squid/access.log
touch /tmp/squid/hosts
touch /tmp/squid/access.log

# 从 gist 获取 "ALLOW ALL TO CONNECT ALL" 配置文件
if [ -e /tmp/squid/squid.conf ]; then
  echo '配置文件 /tmp/squid/squid.conf 已存在,跳过'
else
  echo '即将下载 ALLOW ALL TO CONNECT ALL 配置文件'
  echo '该配置文件允许 squid 接受所有的客户端,代理所有的流量'
  echo
  echo '配置文件地址: https://gist.githubusercontent.com/hpcorona/5065634/raw/677d77ac1ea425793bbb1a901502cd01eb2942c5/squid.conf'
  echo '下载至: /tmp/squid/squid.conf'
  echo
  echo '如果 gist 无法下载,自行下载或使用 ALL_PROXY'
  echo '是否继续?'
  read
  export ALL_PROXY=${ALL_PROXY:-}
  curl -Lo /tmp/squid/squid.conf https://gist.githubusercontent.com/hpcorona/5065634/raw/677d77ac1ea425793bbb1a901502cd01eb2942c5/squid.conf
fi

echo '即将启动 docker, 继续?'
read

# 启动 docker
echo '启动 docker squid'
docker run --rm \
--name squid \
-p 3128:3128 \
-v '/tmp/squid/squid.conf':'/etc/squid/squid.conf':'ro' \
-v '/tmp/squid/access.log':'/var/log/squid3/access.log' \
--entrypoint '/bin/bash' \
datadog/squid:3.5.12 \
-c \
'function appendfile { file="$1"; mkdir -p $(dirname "$file"); shift 1; for i in $(seq 1 $#); do echo "$1"; echo "$1" >> $file; shift; done; };'\
'appendfile /etc/hosts "$@";'\
'chmod 777 /var/log/squid3/access.log; exec /sbin/entrypoint.sh' \
'[$0 不会被解析,这里作为注解] 在下面添加 hosts,直接覆盖容器内部的 hosts 会导致 squid 出错' \
'127.0.0.1 luo3.org.cn'

使用方法

保存至文件 proxy.sh ,给执行权限。

按流程走

./proxy.sh

查看日志

docker exec squid tail -F /var/log/squid3/access.log

连通测试

ALL_PROXY=http://localhost:3128 curl http://luo3.org.cn