一、squid代理服务概述
1.1 概述
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
1.2 工作机制
-
缓存网页对象,减少重复请求
-
它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求
-
也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求
-
然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。
1.3 代理的基本类型
-
传统代理:适用于lnternet,需要明确指定服务器
-
透明代理:客户机不需要指定代理服务的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
二、传统代理案例
2.1 环境
名称 | 角色 | 地址 |
---|---|---|
centos-7 | squit | 20.0.0.45 |
centos-7 | web | 20.0.0.46 |
centos-7 | 客户机 | 20.0.0.55 |
2.2 安装squid服务
#解压到opt目录
tar zxvf squid-3.4.6.tar.gz -C /opt
#安装编译工具
yum -y install gcc gcc-c++
#configure配置
cd /opt/squid-3.4.6
./configure --prefix=/usr/local/squid //安装路径
--sysconfdir=/etc //配置文件目录
--enable-arp-acl //支持acl访问控制列表
--enable-linux-netfilter //内核过滤
--enable-linux-tproxy //透明代理功能模块
--enable-async-io=100 //io对于io的优化
--enable-err-language="Simplify_Chinses" //err-language 报错信息设置为中文
--enable-poll //关闭默认使用poll模式,开启epoll模式提提升性能
--enable-gnuregex //支持正则表达式
--enable-underscore //允许URL支持下划线
#编译及安装
make && make install
#路径优化,便于系统管理
[root@squid squid-3.4.6]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
#创建squid程序性用户
[root@squid squid-3.4.6]# useradd -M -s /sbin/nologin squid
2.3 修改squid配置文件
[root@squid squid-3.4.6]# vim /etc/squid.conf
http_access allow all '//56行添加此项,表示允许所有IP访问'
#http_access deny all '//原有的注释掉'
# Squid normally listens to port 3128
http_port 3128
cache_effective_user squid '//添加指定用户squid'
cache_effective_group squid '//添加指定组 squid'
[root@squid squid-3.4.6]# squid -k parse '//检查语法,没问题可Ctrl + C组合键取消'
[root@squid squid-3.4.6]# squid -z '//初始化缓存目录'
[root@squid squid-3.4.6]# squid '//启动服务'
[root@squid squid-3.4.6]# netstat -ntap |grep 3128 '//检测是否启动成功'
2.4 创建systemctl启动脚本
[root@squid squid-3.4.6]# cd /etc/init.d/
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -natp | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在启动 squid..."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -rf $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -natp | grep squid
else
#增加执行权限
[root@squid init.d]# chmod +x squid
#添加到squid服务
[root@squid init.d]# chkconfig --add squid //添加到service
#设置开机启动
[root@squid init.d]# chkconfig --level 35 squid on //'设置35级别开机自启动'
2.5 设置缓存参数
[root@squid init.d]# vim /etc/squid.conf
http_port 3128 '//下面添加'
cache_mem 64 MB //缓存64M的内容
reply_body_max_size 10 MB //禁止下载的超过10MB的文件
maximum_object_size 4096 KB //超过4MB:的文件不进行缓存
2.6 防火墙设置
[root@squid init.d]# iptables -F
[root@squid init.d]# setenforce 0
[root@squid init.d]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
#重载服务
[root@squid init.d]# service squid reload
[root@squid init.d]# netstat -ntap | grep 3128
tcp6 0 0 :::3128 :::* LISTEN 119829/(squi:d-1)
2.7 配置web服务端
[root@web ~]# yum install httpd -y '//安装httpd服务'
[root@web ~]# systemctl stop firewalld.service '//关闭防火墙'
[root@web ~]# setenforce 0
[root@web ~]# systemctl start httpd.service '//开启httpd服务'