在CentOS 7系统中搭建代理服务器是企业网络管理中常见的需求,主要用于流量控制、访问控制、缓存加速等场景,代理服务器类型包括HTTP代理、HTTPS代理、SOCKS代理等,本文将以Squid代理为例,介绍在CentOS 7上配置HTTP代理服务器的详细步骤及注意事项。

环境准备与安装Squid
首先确保系统已更新至最新状态,执行以下命令更新软件包列表并安装Squid:
sudo yum update -y sudo yum install -y squid
安装完成后,启动Squid服务并设置为开机自启:
sudo systemctl start squid sudo systemctl enable squid
检查服务状态,确保运行正常:
sudo systemctl status squid
配置Squid代理服务器
Squid的主配置文件位于/etc/squid/squid.conf,建议先备份原配置文件:

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
基础参数配置
编辑配置文件,修改以下核心参数:
- 监听端口:默认为3128,可自定义(如
http_port 3128)。 - 访问控制列表(ACL):定义允许访问代理的IP或网段,允许内网网段
168.1.0/24访问:acl localnet src 192.168.1.0/24 # 定义内网网段 http_access allow localnet # 允许内网访问 http_access deny all # 拒绝其他所有访问
- 缓存配置:可选,若需启用缓存,可设置缓存目录大小(如
cache_dir ufs /var/spool/squid 100 16 256,表示缓存100MB空间)。
身份验证(可选)
若需用户名密码认证,需先安装httpd-tools生成密码文件:
sudo yum install -y httpd-tools sudo htpasswd -c /etc/squid/passwd admin # 创建用户admin,按提示输入密码
在配置文件中添加认证规则:
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd auth_param basic realm Squid Proxy Authentication acl auth_users proxy_auth REQUIRED http_access allow auth_users
日志配置
Squid默认访问日志为/var/log/squid/access.log,可通过logformat自定义日志格式(如记录客户端IP、访问时间、URL等)。
防火墙与SELinux配置
CentOS 7默认使用firewall防火墙,需开放Squid端口(3128):
sudo firewall-cmd --permanent --add-port=3128/tcp sudo firewall-cmd --reload
若启用SELinux,需设置Squid端口策略:
sudo semanage port -a -t squid_port_t -p tcp 3128
或临时关闭SELinux测试(sudo setenforce 0,生产环境不建议)。
客户端配置
浏览器代理设置
在浏览器网络设置中配置代理服务器地址为CentOS 7的IP,端口3128,若启用认证则输入用户名密码。
Linux系统全局代理
在/etc/profile或~/.bashrc中添加环境变量(适用于终端访问):
export http_proxy="http://admin:password@192.168.1.100:3128" export https_proxy="http://admin:password@192.168.1.100:3128"
执行source /etc/profile使配置生效。
企业环境常见代理配置场景
| 场景 | 配置方法 |
|---|---|
| 透明代理 | 通过iptables将HTTP/HTTPS流量重定向至Squid端口,需结合NAT配置 |
| 反向代理 | 配置http_port 80 vhost和cache_peer,后端指向Web服务器 |
| 代理缓存优化 | 调整cache_mem(缓存内存大小)、maximum_object_size(最大缓存对象) |
常见问题排查
- 客户端连接超时:检查防火墙、SELinux配置,确认Squid服务状态及端口是否开放。
- 认证失败:确认密码文件路径正确,检查
http_access规则顺序(认证规则需在deny all之前)。
FAQs
Q1: 如何限制客户端只能访问特定网站?
A1: 可通过ACL和access_list实现,仅允许访问example.com:
acl allowed_sites url_regex -i ^http://(www\.)?example\.com http_access allow allowed_sites http_access deny all
重启Squid服务后,客户端将无法访问其他网站。
Q2: Squid代理服务器如何实现日志轮转?
A2: 使用logrotate工具管理日志,编辑/etc/logrotate.d/squid文件,配置如下:
/var/log/squid/*.log {
daily
rotate 7
compress
missingok
notifempty
sharedscripts
postrotate
systemctl reload squid >/dev/null 2>&1 || true
endscript
}
此配置将每天轮转一次日志,保留7天历史,并自动压缩旧日志。
