在CentOS7上设置Squid HTTP Proxy正向代理

it2026-03-15  2

文章目录

在CentOS7上设置Squid HTTP Proxy正向代理安装Squid配置Squid以服务方式运行Squid使用Squid的HTTP proxy关闭Proxyno_proxy 设置问题sudo时代理不生效的问题参考文档

在CentOS7上设置Squid HTTP Proxy正向代理

安装Squid

在有外网访问的机器上,安装Squid作为HTTP proxy server:

yum -y install squid

配置Squid

Squid的配置文件为/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

以服务方式运行Squid:

systemctl enable squid systemctl start squid

查看Squid服务状态:

systemctl status squid -l

查看3128端口:

netstat -tnlp | grep 3128

使用Squid的HTTP proxy

在客户端机器上先验证是否可以连接到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协议。

关闭Proxy

# Check proxy settings env | grep -i proxy # Unset proxy unset http_proxy unset https_proxy unset no_proxy unset HTTP_PROXY unset HTTPS_PROXY unset NO_PROXY

no_proxy 设置问题

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:8080

no_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测试访问网站时,代理不生效,无法访问:

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的实践者和布道者。现在某国际开源软件公司担任高级专家顾问。曾在某电子政务公司担任高级系统架构师。曾在某国际咨询公司担任技术架构交付经理。曾在某跨国银行中国软件开发中心担任高级专家顾问。
最新回复(0)