当前位置: 首页 > 工具软件 > httpproxy > 使用案例 >

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

尹小云
2023-12-01

在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:8080example.com:8080

no_proxy 不支持以下配置:

  • 不支持根据CIDR网段来配置,比如192.168.0.0/16。 (很多Linux工具不支持根据CIDR来配置no_proxy,但是一些工具支持,比如Docker,Kubernetes, OpenShift)
  • 不支持根据*.example.com 通配符语法来匹配子域名,只支持.example.com来匹配子域名。
  • 不支持192.168.* 通配符语法。

参见:

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

参见:

解决方法三:

修改/etc/sudoers,保留HTTP proxy的环境变量。

Defaults    env_keep =  "http_proxy https_proxy no_proxy HTTP_PROXY HTTPS_PROXY NO_PROXY"

参见:

参考文档

 类似资料: