在有外网访问的机器上,安装Squid作为HTTP proxy server:
yum -y install squidSquid的配置文件为/etc/squid/squid.conf。
默认允许同一个子网的其他服务器使用Squid作为proxy server。
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network默认拒绝其他访问:
# And finally deny all other access to this proxy http_access deny all默认端口为3128:
# Squid normally listens to port 3128 http_port 3128一般地,如果proxy server只是提供给同一个子网的客户端机器访问,不需要修改Squid配置文件。
以服务方式运行Squid:
systemctl enable squid systemctl start squid查看Squid服务状态:
systemctl status squid -l查看3128端口:
netstat -tnlp | grep 3128在客户端机器上先验证是否可以连接到Squid proxy server:
telnet proxy_server_ip 3128如果访问不了,需要开放3128端口的网络防火墙或安全组的内网入方向访问。
新建/etc/profile.d/proxy.sh,填入内容为:
PROXY_URL="http://proxy_server_ip:3128/" NO_PROXY_ADDR="127.0.0.1,localhost,.local,.cluster.local,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16" export http_proxy="$PROXY_URL" export https_proxy="$PROXY_URL" export no_proxy="$NO_PROXY_ADDR" export HTTP_PROXY="$PROXY_URL" export HTTPS_PROXY="$PROXY_URL" export NO_PROXY="$NO_PROXY_ADDR"说明:
将proxy_server_ip替换为Squid proxy server的IP。在NO_PROXY_ADDR中添加不需要走代理的地址,这里设置访问本机和子网内的机器时不走代理。让代理设置生效:
source /etc/profile.d/proxy.sh测试:
# 测试访问网站 curl www.baidu.com # 测试下载文件 wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo curl -O http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo注意:不要用ping命令来测试,因为ping命令走的是ICMP协议不是HTTP协议。
no_proxy支持以下几种配置:
完整的IP地址,比如127.0.0.1。支持localhost。父域名,比如或example.com,匹配example.com和子域名any.example.com。子域名,以.开头,比如.example.com,匹配子域名any.example.com,但不匹配父域名example.com。比如.local,可以用来匹配Kubernetes的内部域名。* 表示不使用proxy支持配置端口,比如127.0.0.1:8080 或 example.com:8080no_proxy 不支持以下配置:
不支持根据CIDR网段来配置,比如192.168.0.0/16。 (很多Linux工具不支持根据CIDR来配置no_proxy,但是一些工具支持,比如Docker,Kubernetes, OpenShift)不支持根据*.example.com 通配符语法来匹配子域名,只支持.example.com来匹配子域名。不支持192.168.* 通配符语法。参见:
https://docs.docker.com/config/daemon/systemd/#httphttps-proxyhttps://unix.stackexchange.com/questions/23452/set-a-network-range-in-the-no-proxy-environment-variablehttps://access.redhat.com/documentation/en-us/openshift_container_platform/3.11/html/configuring_clusters/install-config-http-proxies用sudo测试访问网站时,代理不生效,无法访问:
sudo curl www.baidu.com打印sudo时的http proxy环境变量,http_proxy环境变量为空:
sudo printenv http_proxy这是因为sudo时会将原来的环境重置(env_reset),且只保留(env_keep)非常少量的环境变量:
# 查看sudo后的环境变量 sudo env解决方法一: 在sudo命令后紧跟http_proxy,再执行相应命令。比如:
sudo http_proxy=http://proxy_server_ip:3128 curl www.baidu.com解决方法二:
如果只需要sudo yum时代理生效,可以修改/etc/yum.conf,添加
proxy=http://proxy_server_ip:3128参见:
https://www.linuxtechi.com/proxy-settings-yum-command-on-rhel-centos-servers/解决方法三:
修改/etc/sudoers,保留HTTP proxy的环境变量。
Defaults env_keep = "http_proxy https_proxy no_proxy HTTP_PROXY HTTPS_PROXY NO_PROXY"参见:
https://askubuntu.com/questions/530547/proxy-does-not-work-using-sudo
https://help.ubuntu.com/community/EnvironmentVariables
https://www.linuxquestions.org/questions/linux-newbie-8/sudo-yum-via-proxy-doesnt-resolve-hosts-but-can-is-run-as-root-4175422218/
https://www.serverlab.ca/tutorials/linux/administration-linux/setting-a-proxy-in-centos-and-red-hat/
https://www.centlinux.com/2019/10/install-squid-proxy-server-on-centos-7.html
https://hostpresto.com/community/tutorials/how-to-install-and-configure-squid-proxy-on-centos-7/
https://www.tecmint.com/install-squid-http-proxy-on-centos-7/
使用squid在阿里云服务器(centos7)上搭建自己的代理服务器
Centos7 – 用三种方法设置代理服务器上网
nklinsirui 认证博客专家 DevOps DevOps的实践者和布道者。现在某国际开源软件公司担任高级专家顾问。曾在某电子政务公司担任高级系统架构师。曾在某国际咨询公司担任技术架构交付经理。曾在某跨国银行中国软件开发中心担任高级专家顾问。